У меня есть (концептуально) довольно простая прикладная спецификация, которую я реализую в PHP - большая ее часть состоит из загрузки данных проекта, отображения ее, позволяющей пользователю ее редактировать (потенциально добавляя разделы), а затем отправлять указанные данные обратно в базу данных.Двойная загрузка/сохранение объектов в OOPHP - ненужное дублирование?
Я планирую подходя к нему таким образом:
Есть набор основных объектов «Load» (например, ProjectLoad, FormLoad), которые принимают идентификатор при создании, запрос к базе данных и заполнить себя с извлеченные данные. Эти объекты затем могут использоваться для заполнения элементов страницы.
Имейте еще один набор объектов «Сохранить» (например, ProjectSave, FormSave), которые принимают массивы (возвращаются при отправке страницы), заполняют их этими данными, а затем выполняют операции
INSERT\UPDATE
в базе данных.
Это лишнее дублирование? Я просто обращаюсь к OOPHP, и все советы, которые я видел до сих пор, как представляется, указывают на то, что лучше всего пытаться сохранить все (объекты, методы и т. Д.) Как можно более целенаправленные и одноцелевые. Это, похоже, соответствует этим критериям, но есть ли лучший способ?
Всегда здорово узнать, что то, что вы пытались определить в своей голове, имеет собственное имя и более глубокое исследование, чем вы догадались. Data Mappers выглядят как раз то, что мне нужно - хотя, к сожалению, PHP не сохраняет объекты, поэтому я не могу просто навязчивый вызов сохранить ($ project) в конце всего этого. Могу поставить пару статических методов в суперклассе Mapper и использовать их для вызова нагрузок по ID или из массива, как http://stackoverflow.com/a/1701337/3171734. –
И да, я закрою ссылку на CQRS для дальнейшего использования. Этот сайт должен быть доступен с помощью CRUD, но указатель очень ценится. –
Я бы настоятельно рекомендовал использовать статические методы и переменные. Первые действуют как глобальная функция имен, а последние - прославленные глобальные переменные. Если вы отправляете маршрут datamapper, тогда у вас должен быть один сопоставитель для объекта - отдельный сопоставитель для проекта, отдельный для пользователя и т. Д. –