MVC是不一个3层架构。并非每个解决方案都需要为三层或n层,但了解区别仍然很重要。 MVC恰好有3个主要元素,但这些元素不以“分层”的方式工作,他们是相互依存:
Model <----- Controller
\ |
\ v
---- View
的视图取决于模型。控制器取决于查看和型号。因此,这些多个依赖路径不能用作层。
通常有3层解决方案的样子:
Data Access <--- [Mapper] ---> Domain Model <--- [Presenter/Controller] ---> UI
演示/控制器是有些可选 - 在Windows窗体开发,例如,你平时看不到它,而不是你有一个“智能客户端“用户界面,这也可以。
这是一个3层体系结构,因为3个主层(Data,Domain,UI)中的每一个都只有一个依赖关系。通常,用户界面依赖于域模型(或“业务”模型),而域模型依赖于DAL。在更现代的实现中,域模型不是依赖于DAL;相反,关系是相反的,并且稍后在使用IoC容器时注入抽象映射层。在任一情况下,每个层仅取决于先前的层。
在MVC架构,C是控制器,V是UI(查看),并且M是域模型。因此,MVC是一种演示架构,而不是系统架构。它不封装数据访问。它可能不一定完全封装域模型,可以将其视为外部依赖项。它不是分层的。
如果你想物理分开层,那么通常通过将域模型公开为Web服务(即WCF)来完成。这给了你改进的可扩展性和关注清洁分离 - 领域模型是字面上可重复使用的任何地方,可以在多台机器上部署 - 但配备了一个显著的前期开发成本,以及正在进行的维护成本。
服务器架构反映上述3层图:
Database Server <----- Web Services <----- Application
“应用程序”是你的MVC应用程序,这股域模型与Web服务(通过SOAP或REST)。 Web服务运行在专用服务器(或多个服务器)上,显然,数据库托管在自己的服务器上。这是一个3层3服务器架构。