Использование службы WCF с Entity Framework 4 и ... DTO? - PullRequest
8 голосов
/ 05 января 2010

Как описано выше, я реализую многоуровневую архитектуру для работы с WCF и Entity Framework 4 (с poco). Поскольку у меня уже есть постоянное невежество с POCO, мне нужно реализовать DTO, или я могу использовать WCF в чистом виде?

Основная цитата: мне нужно, чтобы DTO передавал легкий объект в сети, или я могу использовать свои объекты POCO.

Что вы, ребята, рекомендуете?

Ответы [ 3 ]

3 голосов
/ 05 января 2010

Трудно ответить, если вы не определите, что такое «чистый путь». Мы говорим о чистоте SOA или WCF?

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

Самый большой вопрос, на который вы хотите ответить, - «как SOA это решение?». Вы не можете совместно использовать свои объекты POCO через границы служб, если вы хотите быть SOA-совместимым. SOA - это разные контракты.

Если вы используете все на основе SOA, вы теряете много функциональности, потому что классы, с которыми ваш веб-уровень будет работать большую часть времени, будут глупыми прокси. Вам придется повторить много логики, и вы потеряли много функций «метаданных, соглашения о конфигурации», которые предоставляет MVC 2.

Если вы добавите модное слово SOA в шредер, что вы должны сделать (http://soafacts.com/), тогда вам будет намного легче обмениваться бизнес-логикой и метаданными по уровням. Если единственным потребителем вашего веб-сервиса является вы сами, то этот метод, вероятно, является вашим лучшим выбором.

Здесь вы можете использовать DTO для отправки по проводам вместо ваших объектов POCO. Единственный недостаток - повторяющаяся логика и множество церемониальных кодов, которые ничего не делают. На самом деле зависит от размера вашего проекта. Если его мало, забудьте о DTO, но если у вас есть 20 разработчиков, работающих с 200 000 LoC, вероятно, стоит создать DTO.

1 голос
/ 11 октября 2011

Самая веская причина рекомендовать DTO при использовании WCF с EF - это то, что классы, основанные на базе данных EF, перетаскивают зависимости реализации в классы прокси. Если вы используете сначала код с классами POCO, то не должно быть никаких зависимостей реализации.

Попробуйте вернуть только ваши классы POCO, но затем внимательно посмотрите на сгенерированные прокси-классы. Убедитесь, что в этих классах нет ничего, что является частью инфраструктуры EF. Если прокси-классы чистые, значит, все готово.

1 голос
/ 05 января 2010

Как сказал jfar, это зависит от того, собираетесь ли вы пользоваться услугами только одного, или от уровня презентации будет только вы.

Если вы делаете позже, и только вы будете использовать свой сервис, вы можете сериализовать свои POCO через границы сервиса wcf. Это то, что я недавно сделал и написал сообщение в блоге о том, как заставить его работать. Это позволит вам использовать те же сущности на уровне приложений, что и на уровне представления.

Надеюсь, это поможет.

...