Delphinum, у меня нет скайпа, гг.
Я просто уже уверен в том что тут лучше делать всё через горизонтальное пере использование.
Меня только смущает что при этом класс коллектора выйдет каким то притянутым за уши:
class EntityCollector implements EntityCollectorInterface {
use EntityCollectorTrait;
}
и это всё что в нём будет.
если у тебя подразумевается повторное использование EntityCollectorTrait где то еще, то норм.
Delphinum, ну да, в EntityManager'e.
L!MP, я не знаю как там у тебя реализовано, но обычно (та же доктрина) менеджер не есть коллекция, менеджер это фассад для: Unit of Work + Object reflector + Query builder + Mapper - а коллекция это просто массив (или объект его представляющий) со всякими полезными плюшками и дочной в виде ProxyCollection для LazyLoad
я, к примеру, в моей новой, мегакрутой (и никогда не завершенной) CMS использую в качестве Collection простой массив, а Manager так вообще из современного умеет только проксировать связи для Lazy Load через Closure
Delphinum, ну названия ж я просто как попало написал.
Это не библиотека работы с БД и даже не с данными вообще.
L!MP, ну я то не знаю что это, у меня для понимания только названия ))
Delphinum, я не стал писать реальные названия классов чтоб не переводить внимание с вопроса на сам контекст, так как он не важен.
Так то речь идёт о DI контейнере.
У него есть биндинги, он сам является коллекцией биндингов, плюс есть возможность создания конекстных биндингов, а значит и есть пул коллекций для каждого контекста.
Вот я у хотел понять как лучше разделить функциональность коллекций между самим контейнером и собственно коллекциями.
Раньше я просто делал базовую коллекцию и проксировал к ней вызовы внутри контейнера.
То есть:
class Container {
protected $bindings;
public function __construct() {
$this->bindings = new BindingCollector;
}
public function hasBinding($type) {
return $this->bindings->hasBinding($type);
}
}
А потом подумал что зачем так делать, можно же реализовать функционал коллекции внутри самого контейнера.
L!MP, я плохо понял твою задачу, если честно. Что за биндинги у тебя в DI?
И варианта тут как бы два теперь: унаследовать контейнер от коллекции или выделить функционал коллекции в трейт который потом применить как в контейнер, так и в классе коллекции.
Первый вариант туп потому что коллекция не является надмножеством контейнера и наследование делать не кошерно.
А второй вариант туп, потому что коллекция как самостоятельный класс все равно нужен, но так как весь её функционал будет реализован в трейте, то сам класс коллекции будет просто содержать его подключение (как я выше давал пример кода).