Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Вопрос по ООП, тем кто хорошо шарит в проетировании патернов
цитата
11/10/17 в 17:30
 S_Flash
(В конексте обьектов, без классов, образно..)
Есть некий обьект, например, - тумба (картинка\thumbnail).
Из базы взято определённое множество данных и при помощи некой фабрики создано множество однотипных этих обьектов тумб со своим личным состоянием.
1. Надо как-то поместить эти обьекты в коллекцию, что-то что может их итерировать в нужном порядке.
2. Надо всю эту коллекцию отправить на обработку, например, нарезать картинку, на которую будет ссылаться img обьекта или ещё что-то..

Сами вопросы:
1) Правильно ли я понимаю, что фабричный метод самого обьекта же тумбы должен уметь её же саму помещать в некую коллекцию? Если да, то сама коллекция - это некий сторониий статический обьект? Какой тут патерн?
2) Какой патерн наиболее уместен, чтоб обработать и уничтожить сами обьекты в определённой очерёдности? Например, коллекция умеет, как очередь отдавать и принимать обьекты? Т.е. отправить всю очередь в абстрактую дробилку и та всё раскидает как надо.
цитата
11/10/17 в 18:02
 mx-user
Присоединюсь к вопросу!

Я пока создаю отдельные статические классы для коллекций, в которых наборы объектов хранятся в виде массива объектов в свойстве $collection. Собственно, эти классы и порождают объекты (прямиком из базы данных).

Если нужно ко всей коллекции применить некий метод, прогоняю коллекцию при помощи foreach и для каждого экземпляра применяю метод.

Вроде б можно и так, но постоянно терзают смутные сомнения. Дохренищща классов. А если хранить коллекцию в каждом объекте, то получится объект (и класс) охренительных размеров и вообще как-то "нелогично".
цитата
11/10/17 в 18:14
 Oswell E. Spencer
ну Repository же ?


$thumbsRepository->addThumb($thumb)
$thumbsRepository->getThumb($thumbId)
$thumbsRepository->getLastByAmmount($ammount)
$thumbsRepository->getSortedByDate()
$thumbsRepository->createMiniaturesForAll()

ну и так далее...
цитата
11/10/17 в 18:58
 mx-user
А если состояние объекта в репозитории зависит от состояния других объектов в другом репозитории, как правильно запросить эти объекты?

Например, размер миниатюр, находится в свойствах объекта $Tube->thumbs_width

Объекты класса Tube лежат в репозитории $tubesRepository

Получаем тумбу
$Thumb = $thumbsRepository->getThumb($thumbId);

У тумбы есть свойство $Thumb->tube_id

Через это свойство свойство мы должны добраться к объекту $Tube чтобы получить свойство $Tube->thumb_width

Как должен выглядеть метод $Thumb->getThumbWidth(); ?
цитата
11/10/17 в 19:04
 Oswell E. Spencer
насколько я смог понять


$thisthumb->thumbWidth = $tubesRepository->getWidthByTubeId($Thumb->tube_id);


метод getWidthByTubeId получает объект по tube_id и возвращает свойство thumbs_width


по поводу очередей.

в repository могут быть методы отправки id необработанных объектов (isCropped=false)в очередь задач(RabbitMQ или типа того), откуда Cropper сможет брать эти id, получать объекты на обработку, кропить, апдейтить (isCropped=true), ну тут насколько фантазии хватит, например Cropper по крону может напрямую из thumbsRepository брать N объектов в работу и т.д. и т.п.


Очередь на обработку, как мне кажется, тоже в виде repository можно организовать)

queueToCropRepository->add($thumbId) ложим кладем
queueToCropRepository->get($thumbId$ammount) берем обработчиком
queueToCropRepository->remove($thumbId) удаляем после обработки

типа как то так вижу
цитата
11/10/17 в 19:38
 mx-user
Oswell E. Spencer писал:
насколько я смог понять

Дада, это, спасибо. Формат коллекциии тубов мы определяем методом, а саму коллекцию передаем как аргумент в методе объекта тумбы.
Иногда случается, что объекты зависят от объектов, а те в свою очередь от третьих, и тогда придется передавать изначально кучу коллекций, но видимо этого не избежать. Особенности архитектуры ))


Эта страница в полной версии