Как мне обращаться с объектами Entity / Domain, используя IoC / Dependency Injection? - PullRequest
2 голосов
/ 10 сентября 2009

В настоящее время я использую PLINQO для генерации всех своих сущностей из базы данных.

Недавно я начал использовать внедрение зависимостей, используя StructureMap, и как часть процесса обучения «разделения моих интересов». Я заметил, что все сгенерированные классы Entity содержат высокосвязанные свойства, используя EntitySet, часть LINQ, что делает мои сущности зависимыми от использования System.Data.Linq.

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

Это перебор? В конце концов, я перейду от использования SQL Server напрямую к веб-службам, и я сомневаюсь, что эти EntitySets легко обойдутся.

У кого-нибудь есть хорошие примеры работы с таким сценарием?

1011 * ТИА *

1 Ответ

4 голосов
/ 11 сентября 2009

Я думаю, что вы на правильном пути - не позволяйте названию сгенерированных классов L2S обмануть вас. Они не являются сущностями в терминологии DDD, а представляют собой строго типизированные представления базы данных. Если вы спросите меня, это деталь реализации, которую нельзя допускать вторжения на уровень домена.

С правильной платформой .NET, и если вы остаетесь исключительно с BCL и не используете дополнительные библиотеки, ваш единственный вариант - определить постоянные невежественные сущности в вашей доменной модели, а затем сопоставить их с классами L2S в доступе к данным. слой. Это боль, но AutoMapper может быть полезным в этом отношении.

Если вы желаете немного отклониться от чистого BCL, есть библиотеки с открытым исходным кодом, которые предлагают постоянное невежество, такие как NHibernate - у меня нет личного опыта работы с NHibernate, но много умные люди высоко ценят это.

В .NET 4.0, Entity Framework и, следовательно, LINQ to Entities также будут предлагать постоянное невежество .

У Джереми Миллера есть статья в журнале MSDN, которая несколько затрагивает тему .

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