тип данных веб-сервиса (контракт) - PullRequest
1 голос
/ 12 марта 2010

У меня общий вопрос дизайна.

у нас есть довольно большая модель данных, которая представляет клинический объект, сам объект имеет более 200 дочерних атрибутов в иерархии.

и у нас есть операция SetObject и операция GetObject. мой вопрос, с учетом наилучшей практики, имеет ли смысл использовать эту единую модель данных в обеих операциях или разные модели данных для каждой из них? Потому что операция Get вернет гораздо больше деталей, чем нужно для Set.

пример того, что я имею в виду: модель данных имеет атрибуты ProviderId и ProviderName; в операции Get необходимо будет вернуть и ProviderId, и ProviderName. Однако в операции Set требуется только ProviderId, и ProviderName игнорируется службой, поскольку система уже имеет эту информацию. В этом случае, если операции Get и Set используют одну и ту же модель данных, ProviderName предоставляется даже для операции Set, не смущает ли это потребителя-разработчика?

Ответы [ 2 ]

1 голос
/ 12 марта 2010

Было бы сказать: это зависит: -)

Нет, серьезно. Как вы редактируете / работаете над объектом? Я предполагаю, что ваше программное обеспечение вызывает службу WCF для извлечения объекта, используя идентификатор, поисковый запрос или что-то в этом роде.

Таким образом, вы получите объект с более чем 200 атрибутами. Как вы работаете над этим, сколько вы обычно меняете?

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

  • код на стороне сервера получит идентификатор для объекта
  • загрузит объект из базы данных
  • затем будет присвоено одному свойству новое значение
  • это сохранит объект обратно в базу данных

Что если вы обновите четыре свойства? Вы пройдете 4 из этих циклов. Или: вы можете расширить метод SetProperty, включив в него словарь пар (имя свойства, значение).

Так что я думаю, это зависит от того, сколько из этих 200 свойств вы меняете в любой момент времени? Если вы измените 10%, 20% этих свойств - не будет ли проще просто вернуть весь измененный объект?

0 голосов
/ 19 марта 2010

Это выглядит как хороший кандидат для использования вашего клинического объекта в качестве канонической модели и предоставления интерфейса сервиса в спокойном стиле. Затем вы можете предоставить различные представления или представления вашего объекта данных только с полями, необходимыми в зависимости от модели использования. Ваши глаголы (получить, установить) станут стандартом http Get, Put.

Существует ряд платформ Rest с открытым исходным кодом, которые можно использовать, чтобы упростить начало работы. Рестлет это тот, который я успешно использовал.

...