TableRegistry :: get()

时间:2018-05-24 21:36:41

标签: cakephp cakephp-3.0 cakephp-3.x

我想问一下您对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的编码标准。 (我已经为自己创建了这个包装器,无论如何都能让我的应用程序从任何类似的变化中获得子弹证明)

你有什么想法?

0 个答案:

没有答案