2009-09-10 19 views
2

我目前使用PLINQO从数据库中生成所有实体。我应该如何使用IoC /依赖注入处理我的实体/域对象?

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

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

这是矫枉过正?最终,我将不再使用SQL Server直接使用Web服务,并且我怀疑那些EntitySets会很容易地通过网络。

有没有人有这样的情况下工作的一些很好的例子?

TIA

回答

4

我认为你是在正确的轨道上 - 不要让生成的L2S类的名字骗了。它们不是DDD术语中的实体,而是数据库的强类型表示。如果你问我,那是不应允许侵入域层的实现细节。

使用正确的.NET框架,如果您纯粹使用BCL并且不使用额外的库,唯一的选择是在您的域模型中定义持久性无关的实体,然后将这些实体映射到数据中的L2S类接入层。这是一个痛苦,但AutoMapper可以在这方面有所帮助。

如果你愿意偏离纯粹的BCL有一些开源库提供持久性的无知,例如NHibernate-我没有任何NHibernate的个人经验,但很多聪明的人认为高度重视它。

在.NET 4.0中,实体框架以及LINQ to Entities will also offer persistence ignorance

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

+0

感谢您的澄清。我很高兴看起来我在这里的正确轨道上。另外,感谢链接到AutoMapper,我一直在考虑编写自己的,但没有意识到CodePlex上有一个开源项目。 – CitizenBane 2009-09-11 15:41:36

相关问题