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

本文关键字:MVC 应用程序 NET 体系结构 ASP | 更新日期: 2023-09-27 18:02:08

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

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

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

谢谢你的建议!

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

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

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

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

编辑回答您的额外问题:

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

因此,我在SQL Server(视图)中构建了一个Read模型,然后从中构建了一个实体框架模型,然后在其之上以只读模式构建了一个WCF数据服务。这听起来比实际复杂得多,只需要几分钟。您不需要再创建另一个模型,只需将EDMX公开为只读即可。参见http://msdn.microsoft.com/en-us/library/cc668794.aspx.

命令服务只是一个单向的常规WCF服务,读取服务是WCF数据服务,你的MVC应用程序消耗它们。