贫血模式 mvc
引文
以下内容,并非正确与错误的讨论
贫血模型:
相信很多人一开始都在使用贫血模式的三层结构
mvc
,所有的业务都放在逻辑层。优点是系统的层次结构清楚,各层之间单向依赖,Client->(View)->business logic(Controller)->Data Access(Model)。
分层:
M是主要数据操作和实体,V是显示层,一般为模板。而C是一个控制层,或者说调度层,负责把Model跟合适的View结合起来,最终呈现给用户。
例:
class Controller
{
public function index()
{
//校验...
//权限...
//与存储通信
//数据处理
//存储层通信 DB::table (反面案例,model都没用到)
//..等等
}
}
实现:
把Model进行简单的封装,然后再Controller里面完成对数据库封装的调用,最后基本上什么都是写在Controller里面。Controller本来应该成为一个非常薄的一层,而现在变得非常的厚重,而且好几个Action在一个Controller里面,动辄就上千行。
分析:
三层结构的影响,问题出在了Controller,他承受了太多的职责,像事务管理、业务逻辑、权限检查等等,这违反了单一职责原则和关注分离原则,并且产生了大量的依赖和循环依赖。当业务复杂度上升时,Controller层所包含的代码将会非常庞大和复杂,直接导致了测试成本和维护上升。
本作品采用《CC 协议》,转载必须注明作者和本文链接
可以尝试使用MVCS;即 M(模型)+V(视图)+C(控制器)+S(服务类),将业务逻辑从C层脱离出来至S层,这样C层只负责流程控制,S层负责数据和逻辑处理。
@我真叫阳阳 嗯,感谢提出自己理论进行讨论。
关于贫血我有个疑问,最近在跟同事争论的,我认为在php中不是充血就是贫血,但同事认为界定贫血是看返回的是一个类集合还是一个数组集合,类集合他认为是贫血,数组集合他认为既不是贫血也不是充血