Вопрос дизайна сервиса WCF - PullRequest
3 голосов
/ 29 января 2010

Можно ли из вашего реального опыта определить контракт на обслуживание одним методом, который будет принимать какой-либо объект как форму запроса и возвращать какой-либо другой объект в результате этого запроса. Я имею в виду, что вместо того, чтобы иметь метод для создания, удаления, редактирования и поиска клиентов, я бы включил эти действия в DataContracts, и что бы служба сделала после получения такого DataContract, было бы предпринять соответствующие действия. Но интерфейс сервиса был бы прост:

interface ISomeService
{
  IMessageResult Process(IMessageRequest msg);
}

Таким образом, IMessageRequest должен был бы подать с именем OperationType = OperationTypes.CreateCustomer, а остальные поля предоставили бы службе достаточно информации, чтобы она могла создать объект или запись Customer в базе данных или что-то еще. И IMessageResult может иметь поле с некоторым кодом для указания, был ли клиент создан или нет.

То, что я пытаюсь достичь с помощью такой конструкции, - это возможность легко делегировать IMessageRequest другим внутренним службам, о которых клиентская сторона даже не знает. Еще одно преимущество, которое я вижу, заключается в том, что если нам придется добавить какую-либо операцию для клиентов, мы обеспечим только дополнительный DataContract для этой операции и не будем ничего менять на стороне интерфейса службы (я хочу избежать этого любой ценой, я имею в виду не новую операции, но с изменением интерфейса службы:)

Итак, что вы думаете? Это хороший способ обработки сложных бизнес-процессов? Что такое питфалы, что может быть лучше.

Если я продублировал какую-то другую ветку и есть ответы на мой вопрос, пожалуйста, предоставьте мне ссылки, потому что я их не нашел.

Ответы [ 2 ]

2 голосов
/ 29 января 2010

Краткий ответ: да, это может быть очень хорошей идеей (и одну я реализовал в той или иной форме пару раз).

Хорошей отправной точкой для такого подхода являются сообщения Дэви Брайона о том, что он называет уровнем запроса / ответа . Свои первоначальные идеи и мысли он объединил в очень полезный проект OSS под названием Agatha , который я предлагаю на сайте клиента, когда я пишу это.

1 голос
/ 29 января 2010

Это именно то, что мы делаем здесь, где я работаю. Он прекрасно работает, его легко понять всем разработчикам, и действительно легко подключить новые методы / класс / и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...