Я хотел бы спросить, что вы думаете об устаревании TableRegistry::get()
статического вызова в CakePHP 3.6
?
На мой взгляд, это не очень хорошая идея.
Сначалаиз всех, использование LocatorAwareTrait
неправильно на многих уровнях.Самое важное, что использование таких признаков может нарушить принципы единой ответственности и разделения интересов.Кроме того, некоторые разработчики не хотят использовать черты как все, потому что считают, что это нарушает объектно-ориентированный шаблон проектирования.Они предпочитают делегирование.
Я предпочитаю также использовать делегирование с сочетанием подхода «легкий вес» и «синглтон».Я знаю, что делегирование инкапсулировано LocatorAwareTrait
, но единственная проблема состоит в том, что он предоставляет (получить / установить) методы TableLocator, которые могут быть использованы неправильно.
Другими словами, если у меня есть следующий фасад:
class Fruits {
use \Cake\ORM\Locator\LocatorAwareTrait;
public function getApples() { ... }
public function getOranges() { ... }
...
}
$fruits = new Fruits();
Я не хочу иметь возможность вызывать $ fruits-> getTableLocator () -> get ('table') вне области действия Fruits.
Другая вещь, которую выНеобходимо учитывать, когда вы вносите такие изменения, является адаптация структуры.Делать TableRegistry::getTableLocator()->get('table')
каждый раз, когда мне нужно получить доступ к модели, - не самая лучшая вещь, если у меня в приложении несколько модулей, которые выходят за рамки простой многоуровневой архитектуры.
Наличие класса flyweight / singleton, такого как TableRegistry
, со свойством getдоступ к нужной модели просто делает разработку более понятной и облегчает жизнь.
В идеале, я просто хотел бы позвонить TR::get('table')
, хотя это нарушает стандарты кодирования Cake.(В любом случае я создал эту обертку для себя, чтобы защитить свое приложение от любых подобных изменений)
Что вы думаете?