Как мне обращаться с объектами Entity/Domain, используя IoC/Dependency Injection?
В настоящее время я использую PLINQO для генерации всех моих сущностей из базы данных.
Недавно я начал использовать внедрение зависимостей с помощью StructureMap и как часть процесса обучения "разделения моих интересов". Я заметил, что все сгенерированные классы Entity содержат сильно связанные свойства, используя EntitySet, часть LINQ, что делает мои сущности зависимыми от использования System.Data.Linq.
Я хотел бы продолжать использовать мои объекты, сгенерированные PLINQO, но в то же время я чувствую, что мне, вероятно, следует сгенерировать какие-то объекты базовых классов / только для данных и, возможно, даже переместить их в другую сборку, а затем использовать какой-то автоматический картограф для преобразования между двумя при необходимости. В лучшем случае (или в худшем случае, в зависимости от того, как вы на это смотрите), я бы хотел, чтобы некоторые интерфейсы представляли их, чтобы позже я мог внедрить их с различными конкретными типами.
Это перебор? В конце концов я перейду от использования SQL Server напрямую к веб-службам, и я сомневаюсь, что эти EntitySet легко пройдут по проводам.
У кого-нибудь есть хорошие примеры работы с таким сценарием?
ТИА
1 ответ
Я думаю, что вы на правильном пути - не позволяйте названию сгенерированных классов L2S обмануть вас. Они не являются сущностями в терминологии DDD, а представляют собой строго типизированные представления базы данных. Если вы спросите меня, это деталь реализации, которую нельзя допускать вторжения на уровень домена.
С правильной платформой.NET, и если вы остаетесь исключительно с BCL и не используете никаких дополнительных библиотек, ваш единственный вариант - определить постоянные невежественные сущности в вашей доменной модели, а затем сопоставить их с классами L2S на уровне доступа к данным. Это боль, но AutoMapper может помочь в этом отношении.
Если вы хотите немного отклониться от чистого BCL, есть библиотеки с открытым исходным кодом, которые предлагают постоянное невежество, такие как NHibernate - у меня нет личного опыта работы с NHibernate, но многие умные люди высоко ценят это.
В.NET 4.0 платформа Entity Framework и, следовательно, LINQ to Entities также будут предлагать постоянное невежество.
У Джереми Миллера есть статья в журнале MSDN, которая несколько затрагивает эту тему.