Наша компания запускает довольно крупную SOA-инициативу. Мы много чего делаем правильно: хорошее общение; деньги на инструменты, где это уместно; и мы приобрели хороший опыт, чтобы помочь нам с переходом.
Мы пытаемся разработать стандарты, которым мы можем следовать как группа, и один из предложенных стандартов меня немного беспокоит:
Мы стандартизировали шаблон, в котором каждая операция принимает объект запроса и возвращает объект ответа.
Я понимаю, что это более или менее стандартный подход для многих людей, но я спрашиваю, почему я должен беспокоиться? (Я не так хорош с полученной мудростью, мне нужно кое-что, почему).
Большинство услуг, которые я буду предоставлять, представляют собой простой организационный поиск метаданных. Например, найдите политику безопасности для конкретного пользователя. Для этого нужен идентификатор пользователя и больше ничего. Стандарт говорит мне, что я должен обернуть этот запрос в объект и обернуть возвращенную политику в объект ответа.
Мое беспокойство усиливается от взгляда на WSDL, который генерируется из наших контрактов. WCF генерирует сообщения запроса и ответа автоматически и переносит даже объект запроса / ответа.
Я полностью понимаю, что если вы делаете сложный запрос, тогда требуется сложный входной объект. Это то, что вы будете делать, даже если услуги не будут задействованы.
У меня вопрос, почему я должен автоматически оборачивать запросы и ответы, когда:
- Это делает простые услуги менее выразительными
- Вы бы сделали это в любом случае для комплексного обслуживания
- WCF в любом случае создает запрос / ответное сообщение
Я нашел следующие аргументы в пользу этого подхода:
Он поддерживает управление версиями, позволяя вставлять необязательные параметры в объект запроса.
В свое время я сделал достаточно COM, и я бы посчитал это почти анти-паттерном для управления версиями. Для некоторых вещей, я полагаю, это помогло бы, но я ожидаю, что там, где это помогло бы, у вас уже есть объект параметра в любом случае.
Это позволяет изолировать общие данные и поведение от базового класса
Этот имеет некоторый вес со мной.
Он уводит людей от поведения в стиле RPC и к поведению обмена сообщениями
Я читал это на сайте Microsoft и слышал от нашего гуру, но до сих пор не имею четкого представления о том, что они значат или почему это ценно. Неужели естественные интерфейсы заставляют людей забывать, что они вызывают удаленный сервис?
Я смотрю на рефакторинг подписей, возможно, 300 методов, так что это нетривиальное количество боли. Я большой поклонник последовательности в реализации, поэтому я готов взять на себя боль, это просто поможет узнать, что это все будет стоить в конце.
Думаю, что заметки Мартина Фаулера об объекте передачи данных здесь уместны.
То же самое может относиться к запросам. Что касается RPC, и почему это плохо:
Я думаю, что это правда, но не главная причина. Другая причина, по которой следует избегать RPC, заключается в том, что он может стимулировать тесно связанные клиенты и сервисы.
источник