Разбор ООП с Delphinum

26.92K
.
L!MP, Ты хочешь чтоб DI контейнер был у тебя коллекцией?
.
# Delphinum (14.11.2016 / 16:05)
L!MP, Ты хочешь чтоб DI контейнер был у тебя коллекцией?
Ну да, чтоб не проксировать вызовы а работать сразу на прямую как я описал выше.
.
L!MP, ну во-первых DI контейнер это не коллекция, во-вторых если уж очень хочется, то можно агрерировать с делегированием:
class Container implements ContainerInterface, CollectionInterface{
  private $collection;

  ... // реализация контейнера

  // реализация интерфейса коллекции через делегирование
  public function get($index){
    return $this->collection->get($index);
  }

  ...
}


Если лень, то можно и трейтом.
.
Delphinum, но отдельный класс коллекции все равно нужен, так что два раза описывать функционал я не буду.
К тому же интерфейс контейнера должен накладывать обязательства и по функционалу коллекции, гг.

Короче, видимо вопрос мой высосан из пальца, раз никто его не понимает хотя я уже и так и сяк объяснил.
.
Агрегация с делегированием это то, что у меня есть сейчас, но из-за этого нужно проксировать вызовы к коллекции отчего я хотел избавиться.
.
L!MP, ну контейнер это не коллекция как бы, я хз как ты их хочешь объединить. Понятие "Коллекции" определяет структуру хранения и доступа к группе данных, потому интерфейсы коллекций определяют методы доступа к данным для коллекций вида: множество, вектор, массив, список, etc.

Контейнер DI, как правило, не используется для описания структуры хранилища сервисов, ему обычно достаточно реализовать один метод вида: build($serviceName)
.
# L!MP (14.11.2016 / 16:14)
Агрегация с делегированием это то, что у меня есть сейчас, но из-за этого нужно проксировать вызовы к коллекции отчего я хотел избавиться.
ну если хочешь пользуй трей, проблем не вижу в этом никаких. Вопрос только в том, нужен ли тебе в системе доступ к DI как к коллекции? Что ты там с этим контейнером такого собрался делать? ))
.
L!MP
Delphinum, ну поэтому я и назвал ее не Collection, а Collector гг.
Мог бы назвать BindingAggregate, BindingBag или как то ещё.
Понятное дело что это не коллекция, там нет ни итератора ничего, просто оберка над, фактически, массивом. Хранилище биндингов с методами добавления/проверки существования/получения/удаления.
.
L!MP, а зачем тебе тогда отдельно коллектор и контейнер? Ты собираешься использовать коллектор где то вовне или он может быть заменен другой реализацией коллектора? Зачем вообще тебе наружу из контейнера выносить интерфейс коллектора?
.
Delphinum, контекстный биндинг.

Есть же как бы глобальный коллектор биндингов, а есть пул коллекторов содержащих биндинги для определенного контекста.

Короче да, отдельно коллектор нужен и интерфейс его нужен.
Всего: 713