может ли сервис wcf быть свободно отделен - PullRequest
0 голосов
/ 20 октября 2010

Начнем с того, что я новичок в мире WCF, так что извините, если это звучит наивно.

Насколько я понимаю, в отличие от веб-сайтов на базе ASP.NET, которые используют ADO.NET для связи с базой данных, приложению на основе silverlight всегда нужны службы WCF или RIA для связи с БД.Мы знаем, что веб-сайты ASP.NET не тесно связаны с моделью базы данных, поэтому можно запускать любой хранимый процесс с помощью ADO.NET и просматривать результаты в сетке, не зная ничего о результирующей объектной модели.

Однако в службе WCF или RIA вы всегда должны синхронизировать ее с моделью сущностей базы данных и не можете запустить какой-либо сохраненный процесс без шаблона результатов в службе.Поэтому в некотором роде Silverlight заставляет нас быть тесно связаны с моделью базы данных.

Можно ли как-нибудь просмотреть результаты сохраненного процесса в сетке независимо от того, сколько раз процесс изменялся в бэкэнде?

1 Ответ

2 голосов
/ 20 октября 2010

Однако в службе WCF или RIA вы всегда должны синхронизировать ее с моделью сущностей базы данных и не можете запустить какой-либо сохраненный процесс без его шаблона результата в службе.Поэтому в некотором роде Silverlight заставляет нас быть тесно связаны с моделью базы данных.

Bzzzzt !!!Неправильный ответ !!

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

WCF end point -> calls through to business layer -> calls DAL -> calls database

Преимущество службы WCF заключается в том, что ее можно использовать для предоставления вашему бизнес-уровню различных отключенных слабосвязанных клиентов.(или потребители - они не должны быть клиентами UI).Все, что выставлено, сделано как интерфейс - служба WCF представляет контракт, который она гарантирует выполнить.Объекты данных, возвращаемые через этот интерфейс, могут быть любыми (если они могут быть сериализованы через границу WCF).Это не обязательно должны быть DataTable или объекты данных, которые отражают структуру моей базы данных.

Я не могу комментировать службы RIA, потому что я не играл с ними.Однако я понимаю, что это всего лишь сервисы WCF с кучей вещей, сгенерированных для вас, что означает, что они могут сильно напоминать структуру вашей базы данных.Чтобы обойти это, нужно просто потратить немного времени и создать свои собственные сервисы WCF.Другие респонденты, возможно, смогут более подробно рассказать об этом:)

Редактировать: Похоже, что реальная проблема заключается в том, что ваш механизм поиска данных - это то, что тесно связано,Существует несколько способов решения этой проблемы, чтобы изолировать последствия внесения изменений (обратите внимание, что это не исчерпывающий список):

  • гарантирует, что ваши вызовы WCF возвращают типизированные объекты - дажепри тесной связи с базой данных объект тип остается прежним, даже если его внутренние компоненты могут изменяться (т. е. если вы добавляете другое свойство), поэтому вам не нужно изменять интерфейс WCF при добавлении другого столбца вВаша таблица базы данных

  • создаст отдельную сборку, которая реализует получение данных из базы данных.Это становится вашим DAL ( D ata A ccess L ayer), помещает туда ваш материал LinqToSql, это отделяет его от сборки, которая реализует конечные точки WCF

  • преобразовать ваши данные, которые возвращаются из базы данных, в более общие и независимые объекты данных легкого веса, прежде чем они пройдут через границу WCF (Объекты передачи данных - DTO)

  • используйте инструмент генерации кода (их много) для генерации ваших интерфейсов WCF на основе ваших определений объектов данных

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