Доктрина 2 заставляет меня задаться вопросом о цели коллекций, какие методы я могу использовать в коллекциях в целом? - PullRequest
4 голосов
/ 24 апреля 2011

Я читал о Doctrine 2 и наткнулся на этот пост http://groups.google.com/group/doctrine-dev/browse_thread/thread/3b21fcea5a408aae,, в котором пользователь хотел расширить класс PersistantCollection с помощью пользовательской коллекции. В нем другой пользователь отвечает,

Коллекции - это коллекции, они содержат элементы и предоставляют средства для
перебирать их или делать другие типичные вещи для сбора (count, filter
элементы, добавлять элементы, удалять элементы, ...), всегда не заботясь о
точный характер предметов (продуктов, изделий или чего-либо еще).
getTotalPrice или getTotalWeight для коллекции полностью
неуместные и расширяющие классы коллекций похожая плохая идея в большинстве
ситуации. Это противоречит многим принципам, единоличная ответственность
принцип, являющийся одним из них. Разместите свою бизнес-логику в своем домене
сами объекты / классы, а не в коллекциях. Коллекции
просто общие контейнеры данных.

У меня вопрос: если бы я хотел что-то сделать с коллекцией объектов книги, например отсортировать их по категориям и посчитать сумму в каждой категории, было бы неправильно создавать метод в классе коллекции для этого? Или я должен сделать статическую функцию внутри объекта для сортировки коллекции? Я просто не совсем уверен, куда бы я поместил этот тип функции .... Заранее спасибо, что нашли время для вашего дня, чтобы прочитать этот пост. Ура!

1 Ответ

2 голосов
/ 24 апреля 2011

Нет, я очень рекомендую против пользовательских коллекций. Интерфейс Collection предоставляет полностью открытый API для управления коллекцией в любом случае, устраняя необходимость в создании подкласса коллекции.

В вашем Category вы можете написать метод, который сортирует коллекции $books. ... и, возможно, подключить его к событию PostLoad. (Почему вы предложили метод static?)

...