支持3层Web服务的架构

时间:2009-12-01 22:37:22

标签: orm web-services data-access-layer business-objects

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

我想要一个3层应用程序:

  • UI-Layer:
    在ASP.net中托管的silverlight应用程序 - Webapp

  • BusinessLogicLayer:
    在不同的服务器上运行的WCF服务/ .NET RIA服务

  • DataAccessLayer:使用像nHibernate或者Linq2Entities这样的ORM


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

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

任何帮助表示赞赏!

祝你好运, Daniel Lang

4 个答案:

答案 0 :(得分:0)

业务对象进入业务层。这些对象由UI层使用,并从Data层调用方法来填充自己。

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

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

答案 1 :(得分:0)

好吧,因为你正在使用WCF,你应该有一个只包含接口和数据类的“契约”。这些课程应该对其他人开放。其中不应包含任何逻辑。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

业务对象进入公共层,

我通常会创建一个项目,它们包含业务对象,枚举以及服务器和客户端之间的常见内容。

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