Сервис онтологии Opengroup SOA в сравнении с интерфейсом сервиса и контрактом на обслуживание
Я пытаюсь понять определения в этом документе. http://www.opengroup.org/soa/source-book/ontologyv2/service.htm
Их определения сервиса, интерфейса сервиса и контракта на сервис либо неясны, либо кажутся отличными от тех, с которыми я обычно сталкиваюсь.
Обслуживание:
"Сервис - это логическое представление повторяемой деятельности, которая имеет определенный результат. Он самодостаточен и является "черным ящиком" для своих потребителей ".
Допустим, у меня есть проект WCF, и у него есть два Operations StoreFront +GetPrice +AddToCart
Определение говорит "повторяемая деятельность". Так есть ли сервис StoreFront? Или у меня есть две службы (GetPrice и AddToCart).
Договор на обслуживание: имеет класс "эффекта". Является ли эффект "возвратная цена" и "добавлен в корзину"?
1 ответ
Из той же статьи:
" Возможность, предоставляемая одним объектом или объектами другим лицам с использованием четко определенных" условий и положений "и интерфейсов". (Источник: спецификация OMG SoaML - мой курсив)
По моему мнению, это предпочтительное определение, чем то, что говорит о "повторяемых действиях".
Ключевое слово в определении - способность. Capability относится к Business Capability, которое является переходом от BPM-индустрии, но в контексте SOA относится к бизнес-сфере с четкими границами.
Таким образом, из этого определения мы можем предположить, что сервисы должны быть доступны или работать в рамках бизнес-возможностей / процессов. Это приводит нас к идее (от принципалов или арендаторов SOA), что сервисы должны быть автономными в четко определенных границах.
В вашем примере вы спрашиваете
Так есть ли сервис StoreFront? Или у меня есть две службы (GetPrice и AddToCart)
Ответ на это, как всегда, "это зависит". Тем не менее, как правило, ценообразование (GetPrice) относится к бизнес-возможности, отличной от заказа (AddToCart). Кроме того, операции отличаются в некоторых других важных отношениях:
- GetPrice - это операция чтения, а AddToCart - операция записи.
- GetPrice является синхронной операцией, в то время как AddToCart вполне может быть асинхронной
Поэтому из них, вероятно, следует предположить, что это две разные услуги с точки зрения бизнеса.
Это предположение имеет некоторые радикальные последствия. Если это две службы, то согласно SOA они должны быть автономными. Это означает, что мы должны стремиться свести к минимуму связь между службами всеми возможными способами, чтобы как можно больше их можно было планировать, разрабатывать, тестировать, создавать, развертывать, размещать, поддерживать и управлять ими как отдельными задачами.
Другим следствием этого является то, что когда вы физически разделяете службы до такой степени, как вы можете показать эти вещи вместе своим пользователям? У них могут быть разные возможности, но им все равно нужно работать вместе на экране.
Кроме того, с точки зрения серверной части Заказ должен знать о данных о ценах, иначе как может произойти выполнение заказа? Если вы разделили базу данных на две части, как служба Checkout может узнать, сколько стоят вещи, какие скидки применять и т. Д.?
Я уже писал об этом материале, поэтому, пожалуйста, не стесняйтесь читать. Я бы рекомендовал прочитать отличную статью о микросервисах Льюиса и Фаулера.