我想问一下您对TableRegistry::get()
中CakePHP 3.6
静态通话的弃用有何看法?
在我看来,这不是一个好主意。
首先,在许多级别上使用LocatorAwareTrait
是错误的。最重要的是,以这种方式使用特征可以打破单一责任和分离关注原则。此外,一些开发人员并不想使用特征,因为他们认为它打破了面向对象的设计模式。他们更喜欢代表团。
我更喜欢使用委托以及flyweight / singleton方法的组合。我知道委托是由LocatorAwareTrait
封装的,但唯一的问题是它暴露了可以错误使用的(get / set)TableLocator方法。
换句话说,如果我有以下立面:
class Fruits {
use \Cake\ORM\Locator\LocatorAwareTrait;
public function getApples() { ... }
public function getOranges() { ... }
...
}
$fruits = new Fruits();
我不希望能够在Fruit的范围之外调用$ fruits-> getTableLocator() - > get(' table')。
进行此类更改时需要考虑的另一件事是框架的调整。如果我的应用程序中有多个模块超出了简单的分层架构,那么每次需要访问模型时执行TableRegistry::getTableLocator()->get('table')
都不是最好的选择。
拥有像TableRegistry
这样的flyweight / singleton类,可以访问所需的模型,这样可以使开发更直接,更轻松。
理想情况下,我只想打电话给TR::get('table')
,虽然这打破了Cake的编码标准。 (我已经为自己创建了这个包装器,无论如何都能让我的应用程序从任何类似的变化中获得子弹证明)
你有什么想法?