В бд есть таблица.
Каждая строка таблицы может быть определенной сущностью, пример: "новость, статья, новинка" и.т.д.
Они имеют, как одинаковые параметры, так и разные, например: заголовок и ссылка, есть у всех, рейтинг есть только у новинки.
Для реализации геттеров этих параметров создал абстрактный класс, в нем-же определил конструктор:
abstract class Base
{
protected $data;
private $categoryIds;
public function __construct(array $params)
{
$this->data = new NullObject($params);
}
public function getTitle() :string
{
return $this->data->title;
}
//...
}
Есть фабрика, которая по определенным критериям данных создает объект нового класса (News, Article) и.т.д.
В конструктор поступает массив данных, который помещается в null объект, а методы уже дергают из него данные. Расписывать конструктор - неудобно, бывает поступает массив содержащий больше 10 элементов.
Также методы некоторых сущностей пересекаются и чтобы не писать несколько раз подряд - просто наследую сущность не от Post, а от сущности имеющий реализации этих методов. Но при этом наследуются и методы, которые мне не нужно.
Что лучше сделать: добавить примеси, либо занулить реализации в дочернем классе, либо еще что-то?
Плюс иногда нужно выбирать коллекцию объектов - для вывода списка, все данные там не нужны, и поэтому я просто подаю туда массив с меньшим количеством данных. В принципе меня все устраивает. Но получается если кто-то захочет вызвать метод использующий данные, которые не пришли в конструктор объекта - получит ошибку. Не охото создавать еще один объект вида ShortNews, т.к в разных местах нужно выбирать разные данные - наплодится много объектов + лишняя логика при построении.
Буду благодарен за любые размышления.