调用诸如的Yii小部件被认为是不好的做法
$this->widget('application.extensions.qrcode.QRCodeGenerator', array(
'data' => $this->data,
'subfolderVar' => true,
'matrixPointSize' => 5,
));
从组件或模型中?如果是的话,为什么呢?
解决方法:
在控制器/模型等中调用小部件是不好的做法,因为小部件是视图对象;
这违反了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