Несколько контрактов данных WCF или несколько контрактов служб, представляющих несколько классов модели данных?

StackOverflow https://stackoverflow.com/questions/1894057

Вопрос

В моей модели данных приложения WPF у меня есть несколько классов, представляющих данные для взаимодействия с внутренней БД через самостоятельную службу WCF.

Должен ли я иметь несколько контрактов данных или несколько сервисных контактов или конечных точек в моей службе WCF для представления этих нескольких классов модели данных WPF?Каков правильный (или, возможно, единственный) способ проектирования WCF в этом случае?

Это было полезно?

Решение

Существует рекомендация по проектированию под названием Принцип разделения интерфейса в котором в основном говорится о том, что также говорится в стандартах кодирования iDesign WCF:не делайте свои интерфейсы (= ваши сервисные контракты) слишком большими и громоздкими.

Учти это:у вас есть огромный сервисный контракт с сотнями методов, и какая-то третья сторона хотела бы реализовать подмножество функций, возможно, только два или три из этих сервисных методов.Если у вас есть один огромный сервисный контракт, им придется реализовать 3-4 интересующих их сервисных метода, а все остальные им придется заглушить - например.что-то вроде throw new NotImplementedException(); или что-то.Это не очень хорошая идея, в общем.

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

Поэтому я думаю, что не существует жесткого правила, что хорошо, а что нет — попробуйте сгруппировать свой сервис в «логически связанные» группы методов.Это, конечно, непростое дело!Но стоит подумать о том, как другие могут использовать ваши услуги.

Кроме того, если у вас есть несколько небольших контрактов на обслуживание, вам будет намного проще, если вам когда-нибудь понадобится что-то изменить.Если вам нужно внести критические изменения в контракт службы, это затронет только тех (надеюсь, немногих) пользователей этого конкретного контракта службы с помощью нескольких методов.Если вам всегда придется менять свой огромный контракт на обслуживание из 200 методов, вы всегда будете влиять на всех - это может быть не очень хорошо!

Другие советы

В терминах WCF контракт данных — это класс, используемый в операции контракта службы.Он называется контрактом данных, поскольку обычно сопровождается аннотацией Атрибут DataContractAttribute для успешного распознавания и сериализации (хотя, начиная с .NET 3.5 SP1 DataContractSerializer работает с объектами POCO, и этот атрибут больше не требуется).Таким образом, у вас может быть один контракт службы с несколькими операциями, работающими с несколькими контрактами данных, которые представлены в одной конечной точке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top