Добавление метода к объектам домена PHP, который преобразует свойства в представление, удобное для СУБД

#php #oop #design-patterns #serialization #persistence

#php #ооп #шаблоны проектирования #сериализация #постоянство

Вопрос:

Допустим, у меня есть объект в PHP, который используется в нескольких местах в одном общем представлении. Этот объект имеет несколько свойств, которые могут быть либо другими объектами, либо ассоциативными массивами и так далее.

Я использую шаблон Data Mapper для сохранения этих объектов, и хотя это пока первый такой сложный объект в этом приложении, мне интересно, как наилучшим образом интегрировать его с data mapper.

Мне интересно, является ли выгодным дизайнерским решением реализовать общедоступный метод makeDBSafe() для объекта. Например, метод makeDBSafe() сериализует определенные свойства атрибута, которые слишком сложны для обычных типов данных SQL.

Например:

 $myObject = new MyObject($data);
// Application logic with $myObject
$myObject->makeDBSafe();
$MyObjectMapper->save($myObject);
  

На мой взгляд, если реализация базы данных должна измениться, то это не влияет на то, как я выбираю сериализацию объектов. Если я хочу изменить фактическое сериализованное представление (т. Е. JSON / XML что угодно), то я бы изменил его только в одном месте и для каждого класса. Кроме того, программа сопоставления данных не будет знать, как происходит сериализация объекта, ему будет предоставлен только объект «готовый к сохранению».

Ответ №1:

Если вы прочитаете описание Мартином Фаулером шаблона отображения данных, вы увидите, что объект домена ничего не должен знать о уровне сохраняемости. В обязанности разработчика отображения данных входит преобразование объекта в памяти в схему сохранения и обратно.

Комментарии:

1. Итак, тогда ответственность за выполнение любых соответствующих преобразований, таких как первое преобразование всех массивов в сериализованные строки и т.д., возлагалась бы на составителя данных?