Мы стремимся к созданию SOA-предприятия ...
Имеется три варианта, например, для обновления информации об участнике. Как нам оформить контракт?
Бизнес-процесс довольно прост. Клиент звонит (или входит в систему) и обновляет свои личные данные, чтобы мы могли получать самые последние данные. Заказчик также может предоставить данные о членах (это будет навалом - потенциально 10 тысяч из 1000 за раз). Это так, чтобы мы могли правильно общаться с ними в будущем. У нас есть несколько внутренних систем.
Подробности:
- Номера телефонов,
- Адрес,
- E-mail
- Название или название компании,
- Контактное лицо,
- Номер налогового досье,
- Семейное положение
- Статус курильщика
В нынешнем виде бизнес-правила:
Если действительный номер налогового файла уже был предоставлен, вы не можете предоставить его снова. (может быть переопределено). При наличии действительных данных об адресе работодатель не может их обновить, предоставляя их только в первый раз.
Вариант 1:
Одна операция, Member.UpdateDetails
- Только один сервис для создания и управления.
- Если бизнес-правила растут, эта услуга может стать менее сплоченной.
- Имеет проблему необходимости проводить различие между указанием, что что-то должно быть удалено, и тем, чтобы оставить это как есть.
- Одна единица работы, одна транзакция.
Вариант 2:
Разбейте на четыре операции: Member.UpdateContactDetails; Member.ProvideTaxFileNumber; Member.UpdateName; Member.UpdateDemographics
- Потенциально упрощает одну операцию - распределяет сложность по четырем операциям.
- По-прежнему существует проблема необходимости различать, что нужно удалить, а не оставлять как есть. Например, что, если бы я только хотел указать статус курильщика без семейного положения.
- Требуется некоторый глубокий анализ, чтобы выяснить, как их правильно сгруппировать. Связность зависит от бизнес-процесса.
- Дополнительные сервисы для написания и поддержки.
- Транзакции становятся проблемой - несколько транзакций обрабатываются вызывающей стороной?
Вариант 3:
Разбейте на еще меньше: Member.UpdateAddress; Member.UpdateBusinessDetails; Member.UpdateContactNumbers; Member.UpdateContactPerson; Member.UpdateEmailAddress; Member.UpdateMailingAddress; Member.UpdatePhysicalAddress; и т.д.
- Устраняет проблему необходимости проводить различие между указанием, что что-то должно быть удалено, и тем, чтобы оставить это как есть.
- Бизнес-правила могут легко развиваться в любой операции.
- Множество сервисов для написания и поддержки.
- Транзакции становятся проблемой - многие транзакции обрабатываются вызывающей стороной?
- Начните выглядеть как установщики свойств / CRUD - очевидно, не стоит.
В первом или втором варианте, скажем, вызывающий абонент хочет обновить только домашний адрес электронной почты - я не могу ожидать, что клиент завершит все сообщение - клиент пропускает все остальные теги? Каков принятый, очевидный, интуитивно понятный способ решения этой проблемы?
Если это действительно шаблон, , то как клиент очищает поле или устанавливает его на ноль? В .NET в коде сервера я не вижу очевидного способа отличить не предоставленные данные и ноль. Поскольку это не очевидно, я ожидаю, что это не принятый образец.