代码之家  ›  专栏  ›  技术社区  ›  CitizenBane

我应该如何使用IOC/依赖项注入来处理我的实体/域对象?

  •  2
  • CitizenBane  · 技术社区  · 15 年前

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

    最近,我开始使用structuremap使用依赖注入,并将其作为“分离我的关注点”学习过程的一部分。我注意到,所有生成的实体类都包含使用EntitySet(Linq的一部分)的高度耦合属性,这使得我的实体依赖于使用System.Data.Linq。

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

    这是多余的吗?最后,我将不再直接使用SQL Server,而是使用Web服务,我怀疑这些实体集是否能够轻松地完成连接。

    有没有人有过处理这种情况的好例子?

    蒂亚

    1 回复  |  直到 15 年前
        1
  •  4
  •   Mark Seemann    15 年前

    我认为您走的是正确的道路-不要让生成的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 .