Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf N层结构_Wcf_Entity Framework_Inversion Of Control_N Layer - Fatal编程技术网

Wcf N层结构

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应用程序) 分布式服

我的处境是,我必须从头开始设计和实现一个系统。我有一些关于体系结构的问题,希望您能对这些问题发表意见和想法

关于该项目的快速信息:它是一个以数据为中心的web应用程序

该应用程序将基于Microsoft.NET Framework 4.0和MS SQL SERVER 2008数据库构建

要求:

  • 丰富的UI和健壮的
  • 多设备支持(每个浏览器和每个设备上)
  • 松耦合
  • 下面是我构建的架构图:

    建筑简介

  • 表示层:HTML5/ASP.NET MVC+JQuery(第一版支持多设备的Web应用程序)
  • 分布式服务:WCF(XML/JSON/JSONP)
  • 域层(业务层):所有业务逻辑
  • 数据持久性(DAL层):采用数据库优先方法的实体框架4.0。POCO实体使用T4模板生成和分离
  • 基础结构层:包含公共库,如POCO实体、异常处理、日志记录等
  • 我关注的是:

  • 由于要构建松散耦合的应用程序,因此将来如果业务需求增长,可以轻松插入新模块,而不会影响体系结构。 因此,我考虑将Repository模式与IoC和DI一起使用(可以是Unity/Ninject/Sprint.NET或任何其他)
  • 支持XML和JSON的WCF
  • 用于放置IoC和DI的分布式服务层
  • 使用Enterprise Library 5.0进行异常处理和日志记录
  • 寻找有价值的意见和建议。
    如果我做错了什么,请告诉我正确的方向。

    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的部署和管理
    值得考虑的是:将主模块和模块2构建为独立的垂直服务堆栈

    我的意思是主模块和模块2变成主服务和服务2

    每个服务都有自己的数据库、业务层、服务层和UI组件

    然而,这引发了一个问题:主服务和服务2如何共同创建我的产品

    为解决这一问题:

  • 在UI端,通过使用客户端代码将来自主服务和服务2的响应加载到一个视图中,将前端缝合在一起

  • 在后端,您使用发布-订阅消息传递来允许主服务订阅服务2中发生的事件,反之亦然

  • 这将导致在松散耦合的垂直服务堆栈上从头构建应用程序,通过异步消息交换保持一致性

    如果需要在应用程序中添加新模块,可以创建一个支持所需功能的新服务堆栈,并将其连接起来,而不需要对其他堆栈进行任何更改(理想情况下,更改现有堆栈的唯一原因是它们希望订阅来自新模块的事件)


    这与您建议的方法非常不同,但在我看来,它可以让您更好地满足松耦合的要求。

    查看您的图表,我有几点不清楚: