php – 在组件中调用的Yii小部件

调用诸如的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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...