Объекты и сущности OOP Value в одном классе

Я рефакторинг старого процедурного веб-сайта PHP в вкусное ООП-приложение с небольшим добавлением дизайна, управляемого доменом, для дополнительного вкуса.

Я продолжаю натыкаться на случаи, когда мне нужны классы, которые могут иметь подклассы, которые являются либо сущностями, либо объектами-значениями.

Например, объект URL. Существует миллион URL-адресов, поэтому все они не могут быть сущностями. Но некоторые из них являются особыми URL-адресами, например, моя домашняя страница. Это сущность.

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

Я предполагаю многое:

class factory { 
 reconstitute($rawdata) {
  if (raw data has identity)
   load up and return entity version of the class 
  else
   load up and return anonymous/value object version of the class

Все это кажется немного странным.

Есть ли какой-нибудь шаблон, в котором обсуждается лучший способ справиться с этой проблемой?


person JW.    schedule 29.07.2010    source источник


Ответы (1)


Я не уверен, что полностью понимаю ваш сценарий, но... имеет ли это какое-то значение? По моему опыту работы с EF/ORM, лучший способ (который я могу придумать) делать то, что вы хотите сделать, - это позволить вашему классу сущностей решать, загружать/сохранять ли себя из/в базу данных на основе определенных бизнес-правил. в классе.

$url = new URLClass('KEY_DATA') // returns loaded object url if key if found in database
$url = new URLClass() // returns new url object
$url = new URLClass('', '110011000110010001000011101010010100') // returns new url with data loaded from raw data

Не уверен, что это действительно поможет вам или даже применимо.

person Dusty Lau    schedule 29.07.2010
comment
Да, спасибо. Это было полезно. Я был одержим тем, чтобы мои классы сущностей отбрасывали любые попытки создать их без идентификатора (в противном случае я не мог понять, как они могут работать с «картой идентичности» (PoEAA)). Итак, я полагаю, вы предлагаете расслабиться и позволить объекту существовать без идентичности, что решит текущую проблему. - person JW.; 30.07.2010
comment
И да, это было то, что я говорил. Я часто создаю экземпляр сохраняемого класса без намерения сохранять данные. Некоторые утверждают, что это приводит к ненужным накладным расходам (и это правда), но иногда это не имеет большого значения. Я также работал с некоторыми фреймворками, которые использовали слой персистентности и немые объекты. При таком подходе вы не добавили бы дополнительных накладных расходов, и ваша проблема все равно была бы решена. - person Dusty Lau; 30.07.2010