Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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
C# ASP.NET MVC应用程序的体系结构_C#_Asp.net Mvc_Asp.net Mvc 3_Architecture_Cqrs - Fatal编程技术网

C# ASP.NET MVC应用程序的体系结构

C# ASP.NET MVC应用程序的体系结构,c#,asp.net-mvc,asp.net-mvc-3,architecture,cqrs,C#,Asp.net Mvc,Asp.net Mvc 3,Architecture,Cqrs,我正在对一个潜在的大型网站进行分析,我有很多问题 该网站将使用ASP.NETMVC3RazorView引擎编写。在大多数示例中,我发现控制器直接使用底层数据库(使用域/存储库模式),因此两者之间没有WCF服务。我的第一个问题是:这个架构适合流量大的大型站点吗?始终可以在站点上实现负载平衡,但这是一种好方法吗?或者我应该让站点使用与数据交互的WCF服务吗 问题2:我想采用CQS原则,这意味着我想将查询与命令部分分开。因此,这意味着查询部分的模型(针对视图进行了优化)与命令部分的模型(针对业务目的进

我正在对一个潜在的大型网站进行分析,我有很多问题

该网站将使用ASP.NETMVC3RazorView引擎编写。在大多数示例中,我发现控制器直接使用底层数据库(使用域/存储库模式),因此两者之间没有WCF服务。我的第一个问题是:这个架构适合流量大的大型站点吗?始终可以在站点上实现负载平衡,但这是一种好方法吗?或者我应该让站点使用与数据交互的WCF服务吗

问题2:我想采用CQS原则,这意味着我想将查询与命令部分分开。因此,这意味着查询部分的模型(针对视图进行了优化)与命令部分的模型(针对业务目的进行了优化,并且仅包含完成命令所需的属性)不同,但两者都作用于同一数据库。你认为这是个好主意吗

谢谢你的建议

  • 对于可伸缩性,它有助于将后端代码与前端代码分开。因此,如果您将UI代码放入MVC项目,并在一个或多个单独的WCF和业务逻辑项目中尽可能多地放入处理代码,那么您的代码不仅会更清晰,而且还能够独立地扩展层/层

  • CQRS是高流量网站的理想选择。我认为CQR与DDD的良好基础库适当结合,即使对于低流量站点也是好的,因为它使业务逻辑更容易实现。从体系结构的角度来看,将数据分为读优化模型和写优化模型是有意义的,因为它使更改更容易进行(可能需要更多的工作,但在不破坏某些内容的情况下进行更改肯定更容易)

  • 但是,如果两者都作用于同一个数据库,我将确保读取模型完全由视图组成,这样您就可以根据需要修改实体,而不会破坏读取代码。这样做的优点是您需要编写更少的代码,但是您的编写模型仍然由一个成熟的实体模型组成,而不仅仅是一个事件存储

    编辑回答您的额外问题:

    我喜欢做的是对读取模型使用WCF数据服务。这种技术(特定于.NET4.0)在数据模型(如实体框架EDMX)之上构建OData(=支持LINQ的REST+Atom)web服务

    因此,我在SQLServer(视图)中构建了一个读取模型,然后在此基础上构建了一个实体框架模型,然后在此基础上以只读模式构建了一个WCF数据服务。这听起来比实际情况复杂得多,只需要几分钟。您不需要再创建另一个模型,只需将EDMX公开为只读。另见


    然后,命令服务只是一个单向常规WCF服务,读取服务是WCF数据服务,您的MVC应用程序会同时使用它们。

    谢谢Roy,这很有意义:)还有一个问题:如果您在ASP.NET MVC web应用程序和两个模型(查询和模型)之间有一个WCF服务,您是否会创建其他数据契约(所以你需要额外的映射)还是将模型本身作为数据契约公开?你会使用支持REST的服务还是普通的WCF?Ludwig,我修改了我的答案来回答你的额外问题。太好了,这回答了我所有的问题!谢谢!!