Как правильно передать объект в класс и стоит ли это делать?
Всем привет!
У меня есть класс Posts, который работает с базой данные (точнее с таблицей постов и связанными с ней таблицами).
Извне, я запрашиваю данные Posts->getById(33);
Класс получает данные из БД, создает на основе полученных данных объекты PostEntity и возвращает в вызывающий класс.
Объект PostEntity представляет из себя класс содежащий сетеры и геттеры с простейшими манипуляциями с данными. Так же он реализует интерфейс JsonSerializable что позволяет мне просто бросать объект в вывод JSON передавая его приложению.
К вопросу:
В объекте поста есть метод PostEntity->getText() который отдает данные с html тегами. Но теперь у меня появилась необходимость сделать так, чтобы в разных местах API я мог указать в каком формате мне отдать текст поста (с html тегами или BB кодами).
Т.к. файл, который вызывает метод Posts->getById(33); никак не взаимодействует, да и не должен взаимодействовать с объектом PostEntity, я никак не могу повлиять на метод PostEntity->getText(), потому что я не вызываю его, т.к. данные выводятся реализуя метод JsonSerializable.
Как решить данную проблему?
У меня есть идея, что вызывая метод Posts->getById(33); я должен передать путь к новому объекту, например, PostEntityBBCodes, который будет расширять класс PostEntity и переопределять метод getText() так, чтобы тот преобразовывал данные не в HTML а в BB коды.
Правильно ли я сделаю в таком случае?
Да и не совсем еще понятно как передать объект в класс Posts, ведь если мне нужно будет получить несколько постов. То каждый последующий пост перезапишет объект предыдущего. т.к. объекты передаются по ссылке.
Но теперь у меня появилась необходимость сделать так, чтобы в разных местах API я мог указать в каком формате мне отдать текст поста (с html тегами или BB кодами).
Как бы текст хранится в одном каком-то формате.
Если хочется хранить в разных форматах, то должен хранится и соответствующий флаг.
А так задача выглядит как заметить html теги на bb-коды.
И тогда это вообще не должно быть в entity, т.к. это просто форматирование.