c# – 如何使用IoC /依赖注入处理我的实体/域对象?

我目前正在使用PLINQO从数据库生成我的所有实体.

最近,我开始使用StructureMap进行依赖注入,并将其作为“分离我的顾虑”的学习过程的一部分.我注意到所有生成的Entity类都包含使用EntitySet的高度耦合属性,EntitySet是LINQ的一部分,它使我的实体依赖于使用System.Data.Linq.

我想继续使用我的PLINQO生成实体,但与此同时,我觉得我应该生成某种基类/仅数据对象,甚至可能将它们移动到不同的程序集中,然后使用某种自动映射器可根据需要在两者之间进行转换.最好(或最糟糕的,取决于你如何看待它),我想要一些接口来表示这些,以便我可以在以后注入不同的具体类型.

这有点矫枉过正吗?最终,我将不再使用SQL Server直接使用Web服务,我怀疑这些EntitySets会轻易地通过网络.

有没有人有一些很好的例子来处理这样的场景?

TIA

最佳答案
我认为你走在正确的轨道上 – 不要让生成的L2S类的名称欺骗你.它们不是DDD术语中的实体,而只是数据库的强类型表示.如果你问我,这是一个不应该被允许入侵域层的实现细节.

使用当前的.NET框架,如果您纯粹使用BCL并且不使用额外的库,那么您唯一的选择是在域模型中定义持久无知的实体,然后将这些实体映射到数据访问层中的L2S类.这是一种痛苦,但AutoMapper在这方面可能会有所帮助.

如果您愿意偏离纯BCL,那么有开源库提供持久性无知,例如NHibernate – 我对NHibernate没有任何个人经验,但很多聪明的人都对此高度评价.

在.NET 4.0中,实体框架,从而LINQ到实体will also offer persistence ignorance.

杰里米米勒有一个article in MSDN Magazine that somewhat touches upon the subject.

转载注明原文:c# – 如何使用IoC /依赖注入处理我的实体/域对象? - 代码日志