Обобщение актеров

В примере между двумя актерами, Customer (клиент) и SalesAgent (торговый агент), можно найти много общего в том, как они взаимодействуют с системой Sales (товарооборот) (здесь SalesAgent может управлять куплей-продажей от имени Customer). Оба актера инициируют прецеденты ListProducts (представить список продуктов), OrderProducts (заказать продукты) и AcceptPayment (принять платеж). По сути, единственное отличие между ними в том, что SalesAgent может инициировать прецедент CalculateCommission (вычислить комиссию). Кроме того, из-за сходства поведения этих актеров на диаграмме возникает масса пересекающихся линий. Это указывает на наличие некоего общего поведения, которое может быть вынесено и представлено в виде более обобщенного актера.
Общее поведение можно вынести путем обобщения актеров. Тем самым мы создаем абстрактного актера, называемого Purchaser (покупатель), который взаимодействует с прецедентами ListProducts, OrderProducts и AcceptPayment. Customer и SalesAgent – это конкретные актеры, потому что данные роли могут выполнять реальные люди (или другие системы). Purchaser – абстрактный актер, поскольку он является абстракцией, введенной просто для представления общего поведения (возможности делать покупки) двух конкретных актеров.
Customer и SalesAgent наследуют все роли и отношения с прецедентами своего абстрактного родителя. Таким образом Customer и SalesAgent взаимодействуют с прецедентами ListProducts, OrderProducts и AcceptPayment. Они наследуют это от своего родителя, Purchaser. Кроме того, SalesAgent взаимодействует с прецедентом CalculateeCommission. Это поведение не является унаследованным, оно характерно для актера SalesAgent. Как видим, разумное использование абстрактных актеров может упростить диаграмму прецедентов. Это также упрощает семантику модели прецедентов, потому что появляется возможность интерпретировать разные вещи одинаково.
Следует отметить, что актеррродитель в обобщении актеров не всегда абстрактен. Это может быть конкретная роль, исполняемая человеком или системой. Однако хорошим стилем считается делать актера-родителя абстрактным для сохранения простоты семантики обобщения.
Мы увидели, что если два актера одинаково общаются с одним и тем же набором прецедентов, их можно обобщить в другом (возможно, абстрактном) актере. Актеры-потомки наследуют роли и отношения с прецедентами от актера-родителя. Актеррпотомок может использоваться вместо актера-предка. Это принцип замещаемости, с помощью которого можно проверить правильность использования обобщения для любого классификатора.
В данном примере SalesAgent или Customer могут использоваться вместо Purchaser везде (т.е. взаимодействовать с прецедентами ListProducts, OrderProducts и AcceptPayment). Таким образом, обобщение актеров является правильной стратегией.

Запись опубликована в рубрике Компьютеры и интернет с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code