Может ли объект участвовать в двух автоматах одновременно? - PullRequest
3 голосов
/ 28 января 2010

Я пишу объектно-ориентированную программу, чей бизнес-процесс требует объекта «билета». Объект «билет» действует двумя способами. Это акции, которые должны быть проданы, и это акции, которые мы либо держим на основе продажи или возврата, либо взяли на себя обязательство купить.

По этой причине у билета в процессе продажи может быть состояние «доступно» или «продано» (есть другие состояния, но это важные). Билет также как состояние в отношении статуса SOR, он либо «сор», либо «куплен».

Теоретически возможно, что билет «sor» может быть «доступным» или «проданным», также возможно, чтобы купленный билет был «доступным» или «проданным». Два набора состояний почти не имеют прямого отношения друг к другу. Предполагается, что «проданный» билет в конечном итоге станет «купленным», а «доступный» билет никогда его не сделает. Вот и все.

Так я был бы прав, чтобы проектировать объект с двумя отдельными и независимыми состояниями? Или он должен иметь только одно государство, которое включает в себя все вышеперечисленное? Что такое лучшая практика?

ДОПОЛНИТЕЛЬНО: Итак, вот хедрекер, пока я жду своего часа для помощи в этом, я вернулся к своему анализу и есть еще один странный слой к этому. У «Билетов» есть подобъекты, называемые «Цены», в которых указывается наличие билета, который может быть продан взрослому по одной цене, ребенку - по другой, а пенсионер - по третьей.

Когда билет находится в состоянии «SOR», которое отмечается на уровне билета, но когда он входит в состояние «Покупка», которое регистрируется по цене, потому что билет может иметь несколько возможных цен, но когда он оплачен Оплачивается только на одном уровне (это связано с такими вещами, как вместимость места).

Аналогично, когда билет «доступен», он имеет несколько возможных цен, но он «продается» по сравнению с «ценой», потому что именно тогда клиент принял решение купить, например, один взрослый, два детских билета. Билеты на определенное мероприятие могут быть полностью скуплены взрослыми или в основном проданы детям, и, очевидно, обычно где-то посередине, но информация, связанная с состояниями, происходит в двух разных объектах. Имеет ли это значение?

Ответы [ 2 ]

1 голос
/ 28 января 2010

Если сами состояния действительно независимы, то мне кажется, что написание

ticket:
   availability: available or sold
   sor: sor or purchased

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

ticket:
      available_&_sor
      available_&_purchased
      sold_&_sor
      sold_&_purchased

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

Разница между ними увеличивается, если у вас есть больше типов для каждого отдельного состояния, и внезапно вы начинаете иметь лотов комбинаций.

0 голосов
/ 28 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...