贫血模式 mvc

引文

以下内容,并非正确与错误的讨论

贫血模型:

相信很多人一开始都在使用贫血模式的三层结构mvc,所有的业务都放在逻辑层。优点是系统的层次结构清楚,各层之间单向依赖,Client->(View)->business logic(Controller)->Data Access(Model)。

分层:

M是主要数据操作和实体,V是显示层,一般为模板。而C是一个控制层,或者说调度层,负责把Model跟合适的View结合起来,最终呈现给用户。

Laravel

例:
class Controller 
{
     public function index() 
     {        
         //校验...
         //权限...
         //与存储通信
         //数据处理
         //存储层通信 DB::table (反面案例,model都没用到)
         //..等等
     }
 }
实现:

把Model进行简单的封装,然后再Controller里面完成对数据库封装的调用,最后基本上什么都是写在Controller里面。Controller本来应该成为一个非常薄的一层,而现在变得非常的厚重,而且好几个Action在一个Controller里面,动辄就上千行。

分析:

三层结构的影响,问题出在了Controller,他承受了太多的职责,像事务管理、业务逻辑、权限检查等等,这违反了单一职责原则和关注分离原则,并且产生了大量的依赖和循环依赖。当业务复杂度上升时,Controller层所包含的代码将会非常庞大和复杂,直接导致了测试成本和维护上升。

php
本作品采用《CC 协议》,转载必须注明作者和本文链接
yourself
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

可以尝试使用MVCS;即 M(模型)+V(视图)+C(控制器)+S(服务类),将业务逻辑从C层脱离出来至S层,这样C层只负责流程控制,S层负责数据和逻辑处理。

4年前 评论
veeoo 3年前
yourself

@我真叫阳阳 嗯,感谢提出自己理论进行讨论。

4年前 评论

关于贫血我有个疑问,最近在跟同事争论的,我认为在php中不是充血就是贫血,但同事认为界定贫血是看返回的是一个类集合还是一个数组集合,类集合他认为是贫血,数组集合他认为既不是贫血也不是充血

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!