шаблона Façade позволит объединять несколько небольших детализированных
операций в одну слабо детализированную операцию. Например, для статистических
данных необходимо обеспечить операцию, которая будет возвращать все данные за
один вызов, чтобы не приходилось делать множество вызовов, каждый из которых
будет возвращать лишь подмножество данных.
При проектировании контрактов данных обеспечивайте возможность расширения и
повторного использования. Контракты данных должны быть спроектированы с
обеспечением возможности их расширения без влияния на потребителей сервиса.
Старайтесь создавать используемые сервисом составные типы из стандартных
элементов. Слой сервисов должен знать о бизнес-сущностях, используемых бизнес-
слоем. Обычно это обеспечивается путем создания для бизнес-сущностей отдельной
сборки, которая совместно используется слоем сервисов и бизнес-слоем.
При проектировании строго придерживайтесь контракта сервиса. Слой сервисов
должен реализовывать и обеспечивать только ту функциональность, которая
оговорена контрактом сервиса, внутренняя реализация и детали сервиса никогда не
должны предоставляться потребителям. Также если необходимо изменить контракт
сервиса для включения в него новой функциональности, реализованной сервисом, и
новые операции и типы не являются обратно совместимыми с существующими
контрактами, создавайте новые версии контрактов. Описывайте новые операции,
предоставляемые сервисом, в новой версии контракта сервиса и новые типы схем – в
новой версии контракта данных. Проектирование контрактов сообщений
рассматривается в главе 18, «Взаимодействие и обмен сообщениями».
Проектируйте автономные сервисы. Сервисы не должны предъявлять никаких
требований к их потребителям и не должны делать никаких предположений о
потребителе или о том, как он планирует использовать предоставляемый сервис.
При проектировании должна быть учтена возможность поступления
недействительных запросов. Никогда не делайте предположения о том, что все
поступающие на сервис сообщения будут действительными. Реализуйте логику
валидации для проверки всех сообщений на соответствие схемам; и отвергайте или
очищайте все недействительные сообщения. Более подробно валидация
рассматривается в главе 17, «Сквозная функциональность». Обеспечьте сервису
возможность выявлять и правильно обрабатывать повторные сообщения
(идемпотентность) путем реализации широко известных шаблонов или через
использование сервисов инфраструктуры. Кроме того, сервис должен уметь
обрабатывать сообщения, поступающие в произвольном порядке (коммутативность).
Это можно сделать, реализуя дизайн, позволяющий сохранять сообщения и затем
обрабатывать их в правильном порядке.
Сервисы должны управляться на основе политик и иметь явные границы.
Сервисное приложение должно быть самодостаточным и иметь четкие границы.
Доступ к сервису должен быть разрешен только через слой интерфейса сервиса.
Сервис должен публиковать политику, описывающую, как потребители могут
взаимодействовать с сервисом. Это особенно важно для открытых сервисов, чтобы