Нормально ли, когда ActiveRecord модель является фабрикой моделей?

Доброго дня.
Есть общая модель Stats, а есть субмодели, описывающие конкретную сущность (ServiceOneStats, ServiceTwoStats). Разделять считаю некорректным, т.к. тип сущности один и тот же - статистика. У каждой из моделей есть своя таблица. Хочется, чтобы, получая инстанс модели Stats с определенным типом, я мог сразу получить доступ к данным подмодели.

Немного псевдокода ниже.
$StatsModel = new Models\Stats(1, 'service-one'); 
$StatsModel->serviceOneField;

$StatsModel = new Models\Stats(2, 'service-two'); 
$StatsModel->serviceTwoField;

Сложность в том, что у Stats тоже есть таблица, с id, title и парой других общих полей (дата создания и т.п.).

Вопрос в следующем: нормально ли, когда AR-модель выполняет функции фабрики \ обращается к фабрике? Ведь мне придется как-то получать дочерние модели, дабы вытащить из них данные правильным (в экосистеме фреймворка) методом. Возможно, есть какой-то паттерн, решающий проблему получения данных из наследуемых моделей (субсущностей)? Или это наоборот, антипаттерн, и модели наследовать нельзя?

Заранее спасибо.
  • Вопрос задан
  • 362 просмотра
Решения вопроса 2
SerjikZ123
@SerjikZ123
Вообще, говорят так: можно наследовать, но каждая дочерняя сущность должна иметь те же методы и свойства, что и родительская. Т.е. если они занимаются, например, ТОЛЬКО форматированием данных перед отображением - то это нормально, а если имеют разную бизнес-логику - то антипаттерн.

1. В данном случае модели разделяют источник данных, имхо это нормально.
2. Если это решает поставленную задачу и не создает проблем - это нормально.
3. Если это повышает удобство использования и скорость разработки - это нормально.

Может спецы в области ООП скажут точнее, но я думаю так :)
Ответ написан
@oxidmod
Class Table Inheritance
Но надо смотреть поддерживает ли ваша ОРМ это нормально
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы