Yii小部件在组件中调用


Yii widget called in component

调用像

这样的Yii小部件是否被认为是不好的做法?
$this->widget('application.extensions.qrcode.QRCodeGenerator', array(
    'data' => $this->data,
    'subfolderVar' => true,
    'matrixPointSize' => 5,
));

来自组件或模型?如果是,为什么呢?

在控制器/模型中调用小部件是不好的做法,因为小部件是视图对象;

这是违反MVC原则的。MVC是基于某些规则设计的,如果遵循这些规则,将会带来显著的好处

阅读Yii自己对他们如何实现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

使用三个不同层的目的是称为关注点分离(Soc)的设计概念。

通俗地说,如果关注点分开,基本上设计人员/UI/UX/前端和应用程序程序员可以相互独立地工作。设计人员需要考虑的是如何呈现数据,而不是如何或从哪里来的数据(即设计和使用小部件),应用程序程序员只需要考虑业务逻辑,而不是担心它需要如何呈现

当你在模型中混合视图对象时,这会被打破。

保持这种分离还有许多其他好处,包括更容易调试(你知道什么是什么),更简单的测试(单元更小更简单),更好的项目管理(不同的团队在应用程序的不同部分工作,而不会破坏彼此的工作),更松散的耦合(例如,我可以很容易地为API或移动应用程序使用相同的模型函数),代码可重用性等;

注意这不是全面的,这只是给你一个想法;不同设计模式的优缺点可以写成很多本书