我目前正在使用PLINQO从数据库中生成所有实体。
最近,我开始使用StructureMap进行依赖注入,并将其作为“分离我的顾虑”的学习过程的一部分。我注意到所有生成的Entity类都包含使用EntitySet的高度耦合属性,EntitySet是LINQ的一部分,它使我的实体依赖于使用System.Data.Linq。
我想继续使用我的PLINQO生成的实体,但与此同时,我觉得我应该生成某种基类/仅数据对象,甚至可能将它们移动到不同的程序集中,然后根据需要使用某种自动映射器在两者之间进行转换。最好(或最糟糕的,取决于你如何看待它),我想要一些接口来表示这些,以便我可以在以后注入不同的具体类型。
这有多大意义吗?最终,我将不再使用SQL Server直接使用Web服务,我怀疑这些EntitySets会轻易地通过网络。
有没有人有一些很好的例子来处理这样的场景?
TIA
答案 0 :(得分:4)
我认为你走在正确的轨道上 - 不要让生成的L2S课程的名称欺骗你。它们不是DDD术语中的实体,而只是数据库的强类型表示。如果你问我,这是一个不应该被允许入侵域层的实现细节。
使用当前的.NET框架,如果您纯粹使用BCL并且不使用额外的库,那么您唯一的选择是在域模型中定义持久无知的实体,然后将这些实体映射到数据访问中的L2S类层。这很痛苦,但AutoMapper在这方面可能会有所帮助。
如果你愿意偏离纯粹的BCL,有些开源库会提供持久性无知,例如NHibernate - 我对NHibernate没有任何个人经验,但很多聪明的人高度评价它。
在.NET 4.0中,实体框架,从而LINQ到实体will also offer persistence ignorance。
Jeremy Miller有article in MSDN Magazine that somewhat touches upon the subject。