Я начинаю проектировать сервисную шину wcf, которая теперь мала, но будет расти по мере роста нашего бизнеса, поэтому меня беспокоят некоторые растущие проблемы, а также я стараюсь не слишком сильно YAGNI. Это платформа электронной коммерции. Проблема в том, что у меня слишком много мыслей о том, куда положить вещи. Я дам сценарий, чтобы продемонстрировать все мои вопросы.
У нас есть сайт электронной коммерции, который продает продукты и в конечном итоге доставляет их. Для этого у нас есть сервис PlaceOrder, который, помимо других параметров, ожидает объект Address, который в этом контексте (наш сайт размещает заказ) состоит из City, Street и ZipCode.
Мы также работаем с партнерами, которые используют нашу платформу только для продажи продуктов. Они заботятся о доставке. Для этого сценария у нас есть сервис PlaceOrderForPartner, который, помимо других объектов, ожидает объект Address. Однако в этом контексте (партнер, размещающий заказ) объект Address состоит из различной информации, которая относится только к заказу, размещенному партнером.
Учитывая этот сценарий, у меня есть несколько вопросов:
1) Как организовать эти объекты DataContracts в пространствах имен и папках в моем решении? Я думал о том, чтобы иметь папку для контекста (Партнер, Клиент и т. Д.) Для хранения услуг и DataContracts.
Итак, я бы получил
- MySolution.sln
- Partner (folder)
- PartnetService.svc
- DataContracts (folder)
- Address
- Customer (folder)
- Customer.svc
- DataContracts (folder)
- Address
Используя этот способ, у меня будет пространство имен для размещения всех моих контекстно-зависимых контрактов данных.
2) А как насчет сервисного дизайна? Должен ли я создать сервис для каждого, который мог бы разместить и заказать и создать метод PlaceOrder внутри него, например:
Partner.svc / PlaceOrder
Customer.svc / PlaceOrder
или создайте сервис заказов с помощью PlaceOrderForPartner и PlaceInternalOrder следующим образом:
Order.svc / PlaceOrderForPartner
Order.svc / PlaceOrderForCustomer
3) Если я выберу первый вариант в последнем вопросе, что мне делать с операциями, которые выполняются в заказе и являются общими для Партнера и Клиента?
4) Должен ли я поместить DataContracts и Service в одну сборку? По одному на каждого? Все с реализацией сервиса?
5) Как назвать входные и выходные сообщения для операций? Должен ли я использовать сами объекты или перейти к шаблону OperationNameRequest и OperationNameResponse?
Суть в том, что мой большой вопрос таков: как "организовать" контракты данных и службы, участвующие в создании службы?
Заранее спасибо за любые мысли по этому поводу