我应该如何使用IoC /dependency injection处理我的实体/域对象?

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

最近,我开始使用StructureMap进行dependency injection,并将其作为“分离我的顾虑”的学习过程的一部分。 我注意到所有生成的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中,entity framework以及LINQ to Entities 也将提供持久性无知 。

杰里米·米勒(Jeremy Miller) 在MSDN杂志上发表了一篇文章,有点涉及这个主题 。