2009-12-01 174 views
1

在通过网络阅读大量关于最佳实践应用程序设计和模式的文章后,我仍然无法将所有信息合并在一起,并映射到我的真实应用程序...3层web服务架构

我想有一个3层的应用程序:

  • UI层:
    的ASP.net中承载的Silverlight的应用程序 - 的webapp

  • 商海ssLogicLayer:
    的WCF服务/ .NET RIA-服务不同的服务器

  • DataAccessLayer上运行:使用ORM像NHibernate的奥德Linq2Entities


的问题是,我不知道知道在哪里放置我的业务对象,以及在哪里填充数据。

是否应该有另一个图层,包含我所有的业务对象,以便它们可以用于所有其他3个图层?
或者我应该把它们放到我的BLL中,然后在DAL中调用nHibernate-Methods - 但是我会在BLL和DAL之间产生循环依赖关系? 如果我在DAL中引入“DataAccessObjects”并将所有属性复制到BLL中的BusinessObjects中,是不是“过度构建”?

任何帮助表示赞赏!

最好的问候, 丹尼尔·兰

回答

0

业务对象在业务层中去。这些对象由UI层使用,并调用Data层的方法来填充它们自己。

通常,图层中的对象只能调用其自己图层或下面的图层中的方法。

其中一个动机是能够替换其中一个图层而不更改其他图层。例如,可能有不同的方式来呈现UI,其可以使用来自业务层的相同方法。或者,也许可以改变数据库,只要新数据层包含与旧数据层相同的方法即可。

0

那么,因为你使用WCF,你应该有一个只包含接口和数据类的“契约”。这些类应该对其他人可用。它里面不应该包含任何逻辑。

+0

Infact,我不直接使用WCF,而是建立在“普通”WCF服务之上的WCF RIA服务。 我的意图是,尽可能保持业务对象的清洁,从而创建额外的“经理”类,它们用业务对象完成所有工作。 – 2009-12-02 16:28:43

0

那么,在回顾整个问题之后,我认为最好的解决方案是使用DependencyInjection或IversionOfControl来用DAL中的数据填充业务对象。

0

业务对象在公共层中去,

我通常创建一个项目,它们包含,业务对象,枚举和什么是服务器和客户端之间的共同。

该项目被所有图层引用。它不能引用任何其他项目,否则这将创建一个循环引用。