MVC应用程序。多层架构如何适应?

时间:2009-07-16 01:56:21

标签: model-view-controller architecture multi-tier

我是MVC和多层网络架构概念的新手。我开发了一个PHP应用程序,并使用了一个可用的MVC框架。我的问题如下:

据我所知,MVC本身并不被视为多层架构。我可以理解单独使用MVC是采用非结构化方法的一步,但我正在考虑如何使用简单的3层架构? MVC会驻留在表示层吗?添加分层方法有什么优点?从我收集到的,仅使用MVC,没有明确的数据对象负责从数据库中检索数据,这通常填充到模型中。同样,业务逻辑可以填充到控制器中,该业务逻辑在3层架构中驻留在“业务层”(或任何您想要称之为的业务层)中。

我的理解有些正确吗?我知道我问了很多问题,但我想听听你如何将n层架构纳入你的MVC框架(PHP或其他),因为我认为这两者并不相互排斥。谢谢!

2 个答案:

答案 0 :(得分:3)

M)M是你的模特。这通常位于您的业务层或表示层后面的层中。许多人不喜欢表示层对业务层有任何了解,因此他们通过拥有所谓的ViewModel进一步抽象出来。这些通常是DTO(数据传输对象),它们松散地映射到您的域模型。对于我(.net家伙),有一些工具,如AutoMapper,可以进行从域模型到视图模型的转换。

V)V是你的观点。视图是您的表示层。这是用户直接触摸并与之交互的实际HTML或PHP代码。视图应尽可能轻(如果可能,意味着没有逻辑)。尝试将任何类型的if / then类型场景保留在视图之外,并坚持只显示和收集数据。向您的Web设计人员展示ViewModel,以便它们不会污染您的DomainModel。

C)C是你的控制者。这很像一个协调员。它从您的视图中获取数据,并确保它获得正确的后端功能/方法来处理该数据。它还协调来自后端的数据到达前端。

多层设计概念的出现在Presentation层的背后(MVC主要在哪里)。当控制器从视图中获取数据并将其传回后端时(如果您遵循DDD或域驱动设计),它会将数据传递给应用程序服务(一个协调后端事务的类)。该服务可能会进一步将数据推送到Repository层(这是一个与数据库,文件系统,Web服务等有关的类 - 任何基础架构的东西)。 DDD是一个很重要的主题,但它会让你了解n层方法以及它如何与MVC协同工作。

在研究这个主题时,请看一下IoC(控制反转),DI(依赖注入),TDD(测试驱动开发)以及尽可能多的模式(外观,工厂等)。

答案 1 :(得分:-1)

一般情况下,业务逻辑不应该在Controller中 - 如果你遵循这种模式,你最终会得到大量的控制器。模型基本上包含所有非表示层...数据访问,业务逻辑和业务实体对象。您的控制器准备视图的业务数据。