Задать вопрос

Какой это паттерн проектирования

Есть несколько сущностей
категория, статья, событие (особая статья), шаблон страницы

несмотря на то, что они сущности совсем разные, у них есть общие свойства — «текстовое содержание», «картинка», «краткое содержание», «время обновления». Так же у них есть индивидуальные свойства — «дата наступления события», «ссылка на событие» (для статьи) и пр…

к каждому свойству принадлежат ряд методов для работы с ними. Например ряд методов для работы с изображением, ряд методов для работы с текстом. и пр.

возникла мысль написать архитектуру сущностей, как набор примитивных классов-параметров. А класс параметр (например «изображение» или «текст») инкапсулирует в себе методы специфичные для данного параметра. Т.о класс событие — это набор параметров — «текст», «картинка», «время события», а класс статья «текст», «картинка», «краткое содержание», «ссылка на событие»

Во всем многообразии паттернов, предполагаю, что существует подобный или даже именно такой паттерн, к которому я пришел в своих размылшениях. Если кто знает, о какой паттерне идет речь, прошу подсказать мне его название.
  • Вопрос задан
  • 2817 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
MarcusAurelius
@MarcusAurelius
автор Impress Application Server для Node.js
… несмотря на то, что они сущности совсем разные, у них есть общие свойства… Так же у них есть индивидуальные свойства...


Паттерн этот называется ООП :) А именно — использование абстрактных классов и наследование. Советую почитать хорошую старую литературу типа Гради Буча.

к каждому свойству принадлежат ряд методов для работы с ними. Например ряд методов для работы с изображением, ряд методов для работы с текстом. и пр.


А вот тут архитектурная ошибка вкрадывается. Классы то Ваши принадлежат предметной области и следовательно, методы классов должны реализовывать бизнес-логику предметной области. Вы же не начинаете хранить в данных класса «статья» файловый дескриптор, таймаут или хендлер какой-то. Конечно, смешивать данные, относящиеся к технологическим особенностям системы и данные предметной области плохо. Но почему-то Вам пришло в голову смешать там логику предметной области и совершенно служебные методы по обработке картинок или текстов. Для этого нужно сделать отдельные классы, и тогда служебные классы будут выполнять методы над классами предметной области и будет Вам концептуальное счастье.

возникла мысль написать архитектуру сущностей, как набор примитивных классов-параметров


Можно конечно изобретать нечто высокоуровневое на основе ООП, но это только если эта архитектура упростит Вашу программу, повысит переиспользование кода, упростит поддержку кода или улучшит другие характеристики.
Ответ написан
@gl00k
Похоже это паттерн компоновщик, хотя я могу ошибаться.
Ответ написан
Weageoo
@Weageoo
Похоже на обычное наследование.
Ответ написан
alexeygrigorev
@alexeygrigorev
Переворачиватель пингвинов
Либо наследование от абстрактных классов (c++), от интерфейсов (java, C#), или duck typing в скриптовых языках (python, groovy, etc).

А вообще, есть принципы SOLID (http://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29), в котором буква I означает ISP — interface segregation principle (http://en.wikipedia.org/wiki/Interface_segregation_principle). Это оно самое и есть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы