一般N层架构问题

时间:2010-03-19 05:55:10

标签: architecture tdd mvp n-tier-architecture

在N-Tier应用程序中,您应该拥有业务逻辑层和数据访问层。 简单地拥有两个程序集是不好的:BusinessLogicLayer.dll和DataAccessLayer.dll来处理所有这些逻辑?你如何实际代表这些层。我看到它的方式似乎很愚蠢,有一个包含以下类的BusinessLogic类库:CustomerBusinessLogic.cs,OrderBusinessLogic.cs等,每个类都在DataAccessLayer类库中调用它们适当命名的表兄弟,即CustomerDataAccess.cs,OrderDataAccess的.cs。

我想使用MVP创建一个Web应用程序,它看起来并不像这样。关于业务逻辑应放在MVP中的位置有很多意见,我不确定我是否找到了一个非常好的答案。

我希望这个项目易于测试,我尽力坚持TDD方法。我打算用MSTest和Rhino Mocks进行测试。

我正在为我的架构考虑以下内容:

我使用LINQ-To-SQL与数据库通信。 WCF服务,用于定义业务逻辑层的数据协定接口。然后将MVP与ASP.NET Forms一起用于UI / BLL。

现在,这不是这个项目的开始,大部分LINQ工作已经完成,所以它被卡住了。 WCF服务将替换现有的DataAccessLayer程序集,UI / BLL将替换BusinessLogicLayer程序集等。

这种方式在我的脑海中是有道理的,但它变得非常晚。任何沿着这条路走下去的人都有指导吗?好的链接?警告?

谢谢!

2 个答案:

答案 0 :(得分:3)

  

我看到它的方式,有一个   包含的BusinessLogic类库   课程如:   CustomerBusinessLogic.cs,   OrderBusinessLogic.cs等

哎哟。阅读并阅读Scott Ambler的“构建对象应用程序”。你的方法不是,而且是一个维护工作 - 没有对象。

  

我会使用LINQ-To-SQL与之交谈   数据库。 WCF服务定义数据   合同的业务接口   逻辑层。然后在ASP.NET中使用MVP   UI / BLL的表单。

是。使应用程序人为地更复杂和更慢的好方法。抛弃完整的WCF服务 - 它们的用途是什么? WCF用于SOA,SOA存在于用户界面中(即,它是一个信任boudary和另一个应用程序要使用的用户界面)。除非你有这个要求......引入额外的慢速技术是非常愚蠢的。

  

WCF服务将取代   现有的DataAccessLayer程序集

每日WTF - 当您使用LINQ to SQL时,您有什么DAL程序集? LINQ to SQL(运行时)是你的DAL。

  

任何走过这条道路的人   有什么指导吗?好的链接?

你基本上选择了我能想到的每一个反模式 - 维护噩梦,在那里过度设计了大量无用的技术。您将层技术强制为分层架构。

阅读我提到的那本书。

答案 1 :(得分:0)

关于XXXBusinessLogic,它们很快成为God Objects。考虑在您的域中有意义的对象表示行为,而不是在BusinessLogic“对象”中。这些“对象”将结束执行XXX的所有工作,是的,它们是维护的噩梦。