Wcf N层结构
我的处境是,我必须从头开始设计和实现一个系统。我有一些关于体系结构的问题,希望您能对这些问题发表意见和想法 关于该项目的快速信息:它是一个以数据为中心的web应用程序 该应用程序将基于Microsoft.NET Framework 4.0和MS SQL SERVER 2008数据库构建 要求:Wcf N层结构,wcf,entity-framework,inversion-of-control,n-layer,Wcf,Entity Framework,Inversion Of Control,N Layer,我的处境是,我必须从头开始设计和实现一个系统。我有一些关于体系结构的问题,希望您能对这些问题发表意见和想法 关于该项目的快速信息:它是一个以数据为中心的web应用程序 该应用程序将基于Microsoft.NET Framework 4.0和MS SQL SERVER 2008数据库构建 要求: 丰富的UI和健壮的 多设备支持(每个浏览器和每个设备上) 松耦合 下面是我构建的架构图: 建筑简介 表示层:HTML5/ASP.NET MVC+JQuery(第一版支持多设备的Web应用程序) 分布式服
如果我做错了什么,请告诉我正确的方向。WPF、WinForm等UI应该调用WCF层。我假设拥有多个UI是业务需求,否则,如果您只能拥有一个UI,那么响应web UI是最灵活的选择 但是,我认为您的MVC UI不需要使用WCF层。它可以直接调用域层。这将更快,并删除一个毫无意义的层 显然,只有在WCF层中没有任何逻辑的情况下,这才有效。WCF层实际上不应该有任何逻辑
您还声明要将IoC和DI放置在分布式服务层中。这对于MVC UI来说没有多大意义。您需要在MVC项目中使用DI,以便对控制器进行单元测试。为什么架构图不使用ASP.NET的域层
在我看来,您可能正在对应用程序进行总体架构设计。此外,虽然支持6种(或更多)不同的前端技术看起来很棒,但维护所有这些技术的努力将是可怕的。我会坚持使用一种前端技术——最有可能是HTML5和客户端MVC或类似技术。我会提出以下意见:从一开始,你的方法就会产生紧密耦合。这直接违背了您的要求#3“松散耦合” 在图表中,您定义了两个模块。主模块和模块2。我想这两个模块是完全不同的。我的意思是,您可以完全单独开发它们,然后将它们插入,因为它们所解决的业务问题是不同的 但是,您当前的体系结构方法:
- 将主模块和模块2数据耦合到同一数据库中
- 将主模块和模块2业务对象耦合到同一业务层
- 将主模块和模块2服务耦合到同一服务层
- 耦合主模块和模块2的部署和管理
这与您建议的方法非常不同,但在我看来,它可以让您更好地满足松耦合的要求。查看您的图表,我有几点不清楚:
- 域模型在哪里?域核心还是持久层中的“模型”
- 域层如何与数据访问层交互?交互不如服务/应用程序层和域层之间的交互清晰
- 域层中的存储库和数据访问层中的存储库有什么区别?我通常区分在域层中作用于域模型对象的“模型存储库”和在数据访问层中作用于DTO的“数据网关”
- 什么是域核心?这是应用层事务的实现吗
- 是否需要对持久性框架进行进一步抽象?(EF)