model-view-controller – MVC应用程序.多层架构如何适应?

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

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

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

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

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

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

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

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

点赞