Почему бы вам не использовать WCF Data Services для запроса данных? - PullRequest
12 голосов
/ 14 сентября 2010

ОК, поэтому мы используем структуру сущностей и хотим предоставить данные из этих сущностей потребителям.Эти данные довольно распространены, и, хотя первоначально они используются только приложениями WPF, в будущем они могут использоваться другими технологиями, такими как Silverlight, ASP.NET, Office и т. Д.

Обычно вы создаете службы WCF, которые предоставляютколичество явных методов для возврата данных в соответствии с потребностями потребителей.Например, GetCustomersById (int Id), GetAllCustomers () и т. Д. Это потребует дополнительных затрат на переписывание службы WCF и решение проблем с версиями, если в будущем потребуется добавить другие методы.Возможно, вы также использовали бы DTO для возврата данных.

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

Все это кажется простым, и я уверен, что мы что-то упустили.Каковы недостатки этого подхода?Кроме того, если мы возвращаем сущности, а не DTO, что еще мы теряем?

Тогда есть очевидное продолжение вопроса, касающегося операций обновления и удаления, которые вы также можете иметь.Стоит ли рассматривать службы данных WCF и для этих операций?

Спасибо за понимание!

Ответы [ 5 ]

5 голосов
/ 15 октября 2010

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


С учетом вышесказанного, аргументы против ....

Недостатком является то, что вы в основном предоставляете им бесплатное управление для запроса данных, как они хотят.В результате они могут делать глупости и вызывать проблемы у других пользователей.Подумайте о том, как легко написать неверный запрос LINQ, который объединяет операции в памяти и в БД.

Дополнительные аргументы против использования Data Services и использования традиционных сервисов - это когда у вас много бизнес-логики или вы хотите передать типы данных, которые находятся за пределами вашей модели сущности (вы можете сделать это в 4.0, но егоболь).

Наконец, мне всегда неудобно, когда дело доходит до вставки / удаления с помощью служб данных, потому что вы требуете, чтобы у вашего конечного пользователя было много знаний о том, как хранятся ваши данные.Вы должны доверять им, и я узнал, что доверие обычно приносит вам вред.

В общем, службы данных хороши, когда вам не нужно навязывать множество «правил» вашим конечным пользователям.(бизнес логика или управление).

5 голосов
/ 14 сентября 2010

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

1 голос
/ 08 октября 2010

Лично я думаю, что ваш первоначальный подход глуп.Это просто.

  • Службы данных позволяют пользователю фильтровать и запрашивать связанные данные по мере необходимости.
  • Службы данных уже имеют полную интеграцию инструментов - язык программирования (проход через LINQ), отчетностьСлужбы, Excel может работать против них.

В конце дня вы предоставляете более удобный API с меньшими затратами на обслуживание и поддержку инструментов.

0 голосов
/ 26 февраля 2019

Службы данных WCF - отличный стандартизированный способ ввода и вывода ваших данных.

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

0 голосов
/ 15 октября 2010

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

Мой подход состоит в том, чтобы иметь уровни служб: например, вашсервис практически ведет себя как слой данных, и точно так же, как вы не предоставляете базу данных клиентам, вы не предоставляете сервис данных напрямую, а через сервисы, которые добавляют дополнительную логику и ценность к данным (обработка данных, контроллеры, бизнеслогика, разрешения и т.д ...).Это был бы типичный SOA-ориентированный подход ...

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

...