Определение действующих лиц для случаев использования - PullRequest
6 голосов
/ 27 августа 2011

Я работаю над небольшим хобби-проектом и экспериментирую с другими вещами.

Система, которую я создаю, представляет собой систему ERP и включает в себя кассу, каталог продукции, базу данных о продажах, журнал продаж (аналогичен базе данных, но используется для целей бухгалтерского учета), принтер, партнер по оплате и корзину (корзина). ).

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

Единственная часть, которую мне не нужно программировать, это платежный партнер.

У меня два вопроса.

1) Будет ли вариант использования для продажи группы продуктов покупателю одним вариантом использования, который называется «продавать предметы по кассе», или будет разбит на несколько вариантов, таких как «добавить продукт в корзину» и «полная продажа» "(в котором будет записан журнал продаж и распечатан чек).

2) Хотя я программирую каталог, базу данных о продажах, журнал продаж, корзину и т. Д., Могу ли я моделировать их как участников в моих сценариях использования? Или единственными действующими лицами являются продавец и партнер по платежам?

Ответы [ 5 ]

3 голосов
/ 04 сентября 2011

Анализ прецедента обманчиво прост, но этот вопрос выдает некоторую внутреннюю сложность.

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

Вариант использования должен представлять собой четко определенное взаимодействие, но не обязательно полный один.Отношение <<include>> можно использовать в ситуациях, когда имеет смысл видеть варианты использования как полного, так и частичного взаимодействия на одном уровне.Вы можете рассмотреть вариант использования buy stuff, включающий, например, browse products, add product to cart и check out <<xor>> cancel, каждый из которых имеет смысл для клиента.

(Я немного запутался в том,Ваша система предназначена для физических или онлайновых транзакций; наличие чеков и распечатанных квитанций, по-видимому, подразумевает первую, корзину для покупок как часть концепций, использованных при анализе последней. Выше подразумевается, что онлайн-система.)

В вашем случае, однако, вы говорите об актерах, которых можно считать частью самой системы.Обычно это означает, что вы пытаетесь определить систему и ее подсистемы одновременно, что часто встречается в ситуациях, когда у вас есть хорошее представление о (возможном) дизайне системы перед началом анализа.

Чтозатем вы хотите разделить анализ на два уровня.На верхнем (системном) уровне очень строго относитесь к системе в целом.В вашем случае вам, вероятно, понадобятся субъекты customer, payment partner, clerk (для системы с физическими транзакциями), accountant (и, возможно, administrator), а также сценарии использования, перечисленные выше, плюс update product catalogue, audit sales log и т. Д.

Затем вы разбиваете систему на подсистемы и делаете отдельный анализ для каждой из них.Здесь подсистемы могут быть действующими лицами в случаях использования друг друга.Print receipt, например, не является значимым вариантом использования на системном уровне, поскольку сам по себе он не является взаимодействием между системой в целом и субъектом системного уровня, но он имеет смысл как вариант использования для подсистемы принтера, с действующим в качестве действующего лица.

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

Итак, после всего этого (фу!) я думаю, чтоОтветы на ваши вопросы:

  1. Оба, при условии, что каждый сценарий использования имеет смысл для его участников в качестве четко определенного (но не обязательно завершенного) взаимодействия с системой.
  2. Да,но не на том же уровне;с одной моделью для системы и отдельными моделями для каждой подсистемы вы можете использовать подсистемы в качестве участников в сценариях использования друг друга.
1 голос
/ 20 сентября 2011

Во-первых, не думайте с точки зрения программирования на данный момент.Подумайте о том, что нужно бизнесу.

Клиенту необходимо:

  • Пропустить каталог
  • Добавить товар в корзину
  • Оформить заказ

Системе необходимо:

  • Показать запрашиваемый товар
  • Завершить продажу (или нет)
  • Собрать платеж
  • Создатьквитанция о продаже для клиента
  • Доставьте купленный продукт

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

Поскольку каталог, база данных продаж, журнал продаж, корзина и т. Д., Являясь действующими лицами - субъекты взаимодействуют с системами (или вариантами использования).Мне трудно представить, что каталог взаимодействует с чем-то.С другой стороны, Заказчик определенно взаимодействует с каталогом.

Актер должен быть жизнеспособным в реальном мире.Если система представляет что-то в реальном мире, система может быть действующим лицом.Но в реальном мире каталог инертен;корзина инертна.Журнал продаж и база данных продаж представляют бумажные записи, которые являются инертными.Они объекты, а не актеры.

Кстати: продавец - это система?

1 голос
/ 28 августа 2011

Я думаю, вам нужно немного отступить. Цель Actors & Use Cases - сначала спросить: «кто будет использовать эту систему?» и "почему они будут его использовать?" Вы можете начать идентифицировать принтер, принтер и т. Д. Как актеров - и, действительно, некоторые из них могут быть - но есть опасность, что вы упустите ключевой момент.

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

  • Актер: Заказчик
    • Основной вариант использования: покупка продукта. Это, вероятно, будет разбито на несколько подэтапов, например Просмотр / сравнение товаров, выбор товара (товаров) (место в корзине для покупок), оформление заказа и т. Д. Также будут поддерживаться UC: проверка статуса заказа, возврат товара, подача жалобы и т. Д.
  • Актер: бухгалтер
    • Примеры использования: предположительно что-то связанное с проверкой статуса заказа / платежа

... и т.д.

Когда вы придете к разработке потока для каждого UC, вы, вероятно, определите другие компоненты, внешние по отношению к вашей системе, с которыми вам нужно взаимодействовать, например, платежный партнер. Вы можете показать их как актеров, если хотите (мои предпочтения - нет, но это чисто личное).

Вы также определите другие элементы вашей системы, которые играют роль в реализации поведения UC (например, sales db и т. Д.). Они являются частью вашей системы и обычно не отображаются как актеры.

Итак, подведем итог: варианты использования предназначены для того, чтобы помочь вам определить назначение системы и то, кто получает от нее ценность, а не структурировать внутренние компоненты проектирования.

НТН.

0 голосов
/ 04 сентября 2011

не прочитав другие ответы: - / вот мои:

1) Будет ли вариант использования для продажи группы продуктов покупателю одним вариантом использования, который называется «продавать предметы по кассе», или будет разбит на несколько вариантов, таких как «добавить продукт в корзину» и «полная продажа» "(в котором будет записан журнал продаж и распечатана квитанция).

Я всегда стараюсь использовать вариант использования как «взаимодействие с системой, которое приносит ценность актеру». «продать предмет» будет иметь значение. «добавить товар в корзину» не будет иметь значения.

Я написал «Я пытаюсь», потому что часто вы начинаете с хороших вариантов использования, которые следуют моему определению, но затем вы начинаете добавлять детали и расширять свои варианты использования ...

2) Хотя я программирую каталог, базу данных о продажах, журнал продаж, корзину и т. Д., Могу ли я моделировать их в качестве участников в моих сценариях использования? Или единственными действующими лицами являются продавец и партнер по платежам?

Я использую актеров не только для реальных людей, но и для систем, которые взаимодействуют с вашей системой. Но термины «база данных», «журнал» и т. Д. Говорят мне, что, кажется, вы хотите добавить слишком много деталей в диаграмму.

Может быть, хороший подход - это сначала подумать о причине создания диаграммы вариантов использования.

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

  • кто будет использовать систему?
  • что эти актеры будут делать с системой?
  • какие другие системы взаимодействуют с новой системой?

И это все. Когда это будет более подробно, я использую другой набор диаграмм.

0 голосов
/ 03 сентября 2011

Варианты использования не являются абсолютными. Вы можете иметь неопределенный вариант использования, такой как Manage Users (я не уверен, что управляемые случаи - это хорошая практика, но это ради примера ...) в первом наброске вашей системы, а затем разбить его на более подробные диаграммы сценариев использования, дорабатывающие вещи по пути, пока вы не перейдете к базовой функции.

Что касается вашего второго вопроса, они звучат как типичные доменные объекты (моделируются как базовая диаграмма классов). Я не думаю, что они должны быть смоделированы как актеры, если они не играют активную роль. Актерами будут физические люди, но также и другие системы, которые взаимодействуют с системой, которую вы создаете. Эти актеры, возможно, в конечном итоге станут так называемыми классами субтитров.

Обновление

При просмотре статьи, указанной выше , выясняется, что актер (синоним игрока) используется для определения целевого объекта, к которому добавляется Роль. Если это правильно, то слово имеет другое значение.

Роль - это особый вид объекта, который добавляет поведение другому объект (актер или игрок)

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