调用Yii小部件(例如
)被认为是不好的做法$this->widget('application.extensions.qrcode.QRCodeGenerator', array(
'data' => $this->data,
'subfolderVar' => true,
'matrixPointSize' => 5,
));
来自组件或模型?如果是的话,为什么呢?
答案 0 :(得分:6)
在控制器/模型等中调用小部件是不好的做法,因为小部件是视图对象;
这违反了MVC原则。 MVC是根据某些规则设计的,如果遵循这些规则会带来显着的好处
阅读Yii自己对implemented MVC如何更好地理解
的解释简而言之,Yii是一个MVC框架;
有三层架构**Model** layer represents consists of application data, business rules, logic and functions
**view** layer represents any output representation of information such a widget
**Controller** layer accepts input and converts it to commands for the model or view
使用三个不同层的目的是称为Separation of Concerns (Soc)的设计概念。
基本上,如果问题是分开的,那么设计者/ UI / UX /前端和应用程序员基本上可以相互独立地工作。设计人员需要担心如何呈现数据而不是如何或来自哪里(即设计和使用小部件),应用程序员只需要考虑业务逻辑而不用担心它需要如何呈现
当您在模型中混合视图对象时,这会被破坏。
维护这种分离还有许多其他优点,包括更容易调试(你知道在哪里)更简单的测试(单元更小更简单),更好的项目管理(不同的团队在应用程序的不同部分工作而不会破坏彼此的工作),松散耦合(我可以轻松地使用API或移动应用程序的相同模型函数),代码可重用性等;
注意这不全面,这只是为了给你一个想法;完整的不同设计模式的优缺点可以fill many books