2016-09-07 10 views
0

Я создал файл WCF service, который отвечает за публикацию данных моей базы данных, так как я не хочу, чтобы база данных напрямую обращалась к моему приложению (по соображениям безопасности), и мне нужно иметь возможность обмениваться данными с сторонними приложениями.Лучше использовать объекты POCO или отдельный объект EntityFramework для предоставления базы данных через WCF?

Мое решение структурировано таким образом: WPF application ->WCFService library ->DataAccessLayer library. (Arrows определяет зависимости сборки 'зависит от')

Чтобы реализовать WCF service, я решил просто вернуть detached EntityFramework objects из службы, но он заставляет основное приложение иметь зависимость от библиотеки DataAccessLayer.

Единственный способ я могу обойти, что порождает POCO objects и использовать их, чтобы отправить их по проводам, но теперь у меня есть для отображения значений вперед и назад EntityFramework.

В данный момент я генерации POCO сек динамически через T4 template, и я использую AutoMapper для отображения значений взад и вперед EntityFramework.

Служба Wcf просто должна реализовать шаблон репозитория для предоставления данных.

Это хорошее решение? Есть ли другой вариант? Есть ли недостатки, о которых я должен знать?

ответ

0

В зависимости от ваших ограничений, я должен согласиться с этим решением.

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

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

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

Наконец, я также смог использовать шаблоны T4 для создания репозиториев Delphi, которые взаимодействовали с SOAP-сервисами.

Или

Вы можете так же легко перемещать Pocos (и генерацию кода) в виде отдельного проекта, изменить свою библиотеку DataAccessLayer для ссылки на библиотеку Pocos и содержат только контекст Db, составленную из DbSets в вашей POCOs и логики доступа к данным, но нет объектов (которые теперь являются POCOs). Ваши клиенты не должны иметь зависимость от библиотеки DataAccessLayer.

Итак ... хорошее решение, в зависимости от ваших ограничений.