2009-07-16 94 views
4

我是新来的MVC和多层web架构的概念。我正在开发一个PHP应用程序并使用其中一个可用的MVC框架。我的问题如下:MVC应用程序。多层体系结构如何适应?

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

我的理解是否正确?我知道我问了很多问题,但我想听听你讨论如何将一个n层架构整合到您的MVC框架(PHP或其他)中,因为我认为这两者不是互斥的。谢谢!

+0

可能的重复项:http://stackoverflow.com/questions/899803/have-i-implemented-an-tier-application-with-mvc-correctly?rq=1,http://stackoverflow.com/questions/ 2843311 /开发一个网站在mvc和三层或n层架构师是什么?rq = 1,http://stackoverflow.com/questions/14451444/ MVC-多层的移动的应用程序 – 2013-08-13 12:00:17

回答

3

M)M是你的模型。这通常位于业务层或表示层后面的图层中。许多人不喜欢表示层对业务层有任何了解,所以他们通过拥有所谓的ViewModel来进一步抽象。这些通常是DTO(数据传输对象),它们大致映射到您的域模型。对于我来说(.net家伙),有一些工具可以使AutoMapper从Domain Model转换到View Model。 V)V是你的看法。该视图是您的表示层。这是用户直接触摸并与之交互的实际HTML或PHP代码。该视图应尽可能轻(如果可能,则不含逻辑)。尽量保留任何类型的if/then类型场景,并坚持只显示和收集数据。向您的网页设计师呈现ViewModel,以免污染您的DomainModel。 C)是你的控制器。这很像一个协调员。它从您的视图中获取数据并确保它到达处理该数据的右后端函数/方法。它还协调从后端到前端的数据。

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

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

-1

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