Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Евгений / идз1 / Пособие_Об_анал.doc
Скачиваний:
19
Добавлен:
31.03.2015
Размер:
1.44 Mб
Скачать

1.7.4. Обязанности транзакций проблемной области

Транзакции— это моменты времени, в которые объект взаимодействует с кем-то и о которых система обязана помнить для удовлетворения своих будущих потребностей. Рассмотрим следующие транзакции:

— продажа (и ее часть — экземпляр строки продажи);

— оплата;

— сеанс.

Продажа

А. Определение обязанностей: "что я знаю"

#54. Стратегия "Определение атрибутов транзакций"

• Для транзакций нужно определить: номер, дату, время и статус.

• Для экземпляров строки требуются: количество (если экземпляр строки знает "какой-то", а не конкретный экземпляр товара) и статус.

Для транзакции sale(продажа) нужны два атрибута:

— дата и время.

Следующая стратегия применяется для total(общая сумма).

#66. Стратегия "Вычисление результата"

• Прежде всего, не стройте в объектной модели атрибут для выражения вычисляемого резу­льтата.

• В случае необходимости этот атрибут можно добавить следующим образом: Точно определите для данного атрибута службу "get <attribute>".

Определите эту службу так, чтобы она: проверяла значение атрибута и возвращало это значение, если оно существует, а в противном случае задействовала службу вычисления, сохраняла результат вычислений и возвращала его.

Точно определите службу "calculate <attribute>", чтобы поручать объекту выполнение нужных вычислений.

К модели "total" можно добавить в качестве атрибута и "gettotal" в качестве службы. Однако для простоты запланируйте пока внесение в модель только службы "calculatetotal".

Б. Определение обязанностей: "кого я знаю".

Определим, кого в общем случае должен знать объект transaction.

#76. Стратегия "Определение связей объекта транзакции"

• Для транзакции определите ее связи с участниками, с экземплярами строки транзакции и с сопутствующей транзакцией (происходящий в тот же момент времени).

• Для экземпляра строки транзакции обозначьте ее связи с транзакцией, с сопутствующим объектом "описание экземпляра товара" и с экземпляром строки следующей транзакции.

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

— сеанс;

— оплату;

— экземпляры строки продажи.

В. Определение обязанностей: "что я делаю".

#96. Стратегия "Определение служб для транзакции"

• Для транзакции включите в модель следующие службы: calculate for me (вычислить для меня), rate me (оценить меня), is <value> (есть <значение>).

• Для транзакции в качестве множества нужны следующие службы: how many, how much (сколько?), rank transaction line items (оценить экземпляры строки транзакции), rank subsequent transactions (оценить следующие транзакции), calculate over transaction line items (провести вычисления на множестве экземпляров строки транзакции), calculate over subsequent transactions (провести вычисления на множестве следующих транзакций) (плюс службы для выполнения бизнес- правил на всем этом множестве).

• Для экземпляров строки определите службы: calculate for me (вычислить для меня), rate me (оценить меня).

Что касается системы торгового терминала, транзакция saleможет выполнять следующие полез­ные действия:

— вычислять промежуточную сумму для данной продажи (без налога);

— вычислять скидку для данной продажи;

— вычислять налог для данной продажи;

— вычислять общую сумму для данной продажи (всю сумму с учетом налога);

— завершить (commit).

Добавим обязанности транзакции saleк объектной модели (рис.1. 32).

Рис.1. 32. Продажа: «что я знаю, кого я знаю, что я делаю»

Соседние файлы в папке идз1