MVC不是3层架构。并不是每个解决方案都需要3层或n层,但了解区别仍然很重要。MVC恰好有三个主要元素,但这些元素不以“分层”的方式工作,它们是相互依存的:
Model <----- Controller
\ |
\ v
---- View
视图依赖于模型。控制器依赖于视图和模型。因此,这些多个依赖路径不起到层次结构的作用。
通常,三层解决方案如下:
Data Access <
Presenter/Controller是可选的 - 例如,在Windows Forms开发中,您通常看不到它,而是有一个“智能客户端”UI,这也可以。
这是一个3层架构,因为每个主要的3层(Data、Domain、UI)只有一个依赖。经典地,UI依赖于域模型(或“业务”模型),而域模型依赖于DAL。在更现代的实现中,域模型不依赖于DAL;相反,关系被反转,并且使用IoC容器稍后注入了一个抽象映射层。在任一情况下,每个层仅取决于前一个层。
在MVC架构中,C是控制器,V是UI(视图),M是域模型。因此,MVC是一种表现架构,而不是系统架构。它不封装数据访问。它可能不完全封装域模型,它可以被视为外部依赖项。它不是分层的。
如果要将层物理分离,则通常通过将域模型公开为Web服务(即WCF)来实现。这为您提供了改进的可伸缩性和分离关注点的更清晰的方法-域模型真正地可以在任何地方重复使用,并且可以部署在许多计算机上-但同时带有显着的开发成本以及持续的维护成本。
服务器体系结构反映了上述3层图表:
Database Server <----- Web Services <----- Application
"Application" 指的是您的MVC应用程序,它通过SOAP或REST与Web服务共享域模型。 Web服务运行在专用服务器(或多台服务器)上,数据库显然托管在其自己的服务器上。 这是一个三层,三服务器架构。