Разработка контракта на веб-сервис - одна ответственность - PullRequest
2 голосов
/ 21 ноября 2010

Мне любопытно узнать, как большинство разработчиков разрабатывают контракты для своих веб-сервисов. Я совершенно новичок в сервисной архитектуре и особенно новичок в WCF.

Короче говоря, я хотел бы выяснить, какой тип объектов вы возвращаете в своих операциях, и возвращает ли каждая операция в вашем сервисе один и тот же объект?

Например, рассмотрим следующее: В настоящее время все создаваемые мной сервисы наследуются от объекта ServiceBase, который выглядит примерно так: <pre> public abstract class AppServiceBase<code><TDto>: DisposableObjectBase, где TDto: IDto { защищенный запрос IAppRequest {get; задавать; } защищенный IAppResponse <TDto> Response {get; задавать; } }

Response представляет возвращаемый объект, который составляет что-то вроде: <pre> public interface IAppResponse<code><TDto> где TDto: IDto { List <TDto> Data {get; } ValidationResults ValidationResults {get; } RequestStatus Status {get; } }

Следовательно, любая производная служба будет возвращать ответ, состоящий из того же объекта. Сначала я подумал, что это будет хороший дизайн, так как это заставляет каждую службу отвечать за один объект. По большей части это сработало, но по мере роста моих услуг я стал сомневаться в этом дизайне.

Взять это, например: У вас есть музыкальный сервис, который вы пишете, и одним из ваших сервисов будет «Альбомы». Итак, вы пишете базовые операции CRUD, и они почти все возвращают коллекцию AlbumDto.

Что делать, если вы хотите написать операцию, которая возвращает типы альбомов. (LP, Single, EP и т. Д.) Итак, у вас есть объект AlbumTypesDto. Вы бы создали новый сервис только для этого объекта или ваш сервис Albums возвращал много разных объектов?

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

Что ты думаешь?

1 Ответ

1 голос
/ 21 ноября 2010

Это хорошая идея, чтобы спроектировать свои услуги вокруг проблемы вашего домена. Предоставляя шаблон службы CRUD для службы, по существу вы используете службы для доступа к данным. Риск в том, что ваша бизнес-логика в конечном итоге будет зависеть от того, что потребляет ваш сервис.

Ваша служба должна предоставлять методы, относящиеся к проблеме, которую вы пытаетесь решить (которая обычно моделирует работу в пользовательском интерфейсе)

Отсюда вы увидите, что ваши контракты на данные начинают более естественно соответствовать проблеме, которую вы пытаетесь решить, вместо того, чтобы создавать контракты "один размер подходит всем".

Для хорошего начала, Google "Domain Driven Design", но есть много справочных материалов по этому вопросу.

...