Mic*_*ael 2 model-view-controller zend-framework view domain-model
嘿伙计们 - 这是一个关于Zend Framework的问题,或者更好的关于MVC的问题:
如果将业务对象(用户,团队等)推送到我的视图或者将转储数据容器(如数组)推送到我的视图会更好,我现在要求自己安静一段时间了.用于渲染的视图.
在将业务对象推送到我的视图时,我在视图和我的域模型之间有更紧密的耦合,但是,视图可以轻松地执行foreach($ this-> team-> getUsers()as $ user){...我个人觉得非常方便.
向我提供哑数组中的域模型数据看起来更健壮和灵活,但是视图的成本不能在真实对象上操作,因此无法使用对象的方法访问相关数据.
你们是怎么处理的?
非常感谢,迈克尔
最好使View以面向对象的方式访问域模型对象,而不是使用Controller将Model数据转换为普通的标量和数组.
这有助于防止控制器变得太胖.请参阅Anemic Domain Model反模式.Controller只需要知道要实例化的Model,将请求输入传递给该Model,然后将Model注入View脚本并进行渲染.请记住,域模型不是数据访问类.
您还可以编写View Helpers来封装Domain Model对象的通用渲染,以便可以在多个View脚本中重复使用它.
您的View应仅以只读方式访问域模型.视图脚本不应尝试对域模型进行更改.
您还可以根据需要设计域模型以实现ArrayObject或其他SPL类型,以便在View脚本中轻松使用OO.
确实,MVC和OO设计的一大驱动力一般是脱钩.我们希望允许每个层保持不变,因为其他层被修改.只有通过他们的公共API才能使图层相互作用.
ViewModel是一种抽象模型的解决方案,因此View不需要更改.我倾向于使用的是Domain Model,它抽象了表设计的细节等,并提供了一个更专注于业务而不是数据访问的API.因此,如果您的基础表发生更改,View不必了解它.
我希望如果对域模型进行更改,例如它需要提供一种新类型的属性,那么很可能您的View仍在改变,以在UI中显示该新属性.
您选择将哪一层与其他层分离的技术取决于您期望最常见的更改类型,以及这些更改是否将是真正独立的更改,或者无论如何它们都需要更改多个层.
| 归档时间: |
|
| 查看次数: |
529 次 |
| 最近记录: |