我正在忙着阅读并享受 Mark Seemann 所著的 .Net 中的依赖注入。
我很难解释确切的上下文,所以如果你熟悉这本书,请只关心这个问题。
我的问题与第 2 章第 49 页中的两个 Product 类有关。其中一个位于域层,一个位于数据访问层。据解释,数据访问层中的 Product 类是由 Linq to Entity 向导创建的。
我正在使用 Linq to SQL,并且我可以使用 Ling to SQL 属性来装饰我的模型类,这样我就不必拥有第二个类。例如。
[Table(Name="Customers")]
public class Customer
{
[Column(IsPrimaryKey=true)]
public string CustomerID;
[Column]
public string City;
}
然而,我觉得这是混合问题,它实际上将我的域层与 Linq to SQL 数据访问层紧密耦合。你同意这一点吗?
假设我为域和数据访问层创建了两个“客户”类。假设城市是必填字段。保存时需要检查这条规则。这应该在域层还是数据访问层或两者中完成?
谢谢,达林
然而,我觉得这是混合问题,它实际上将我的域层与 Linq to SQL 数据访问层紧密耦合。你同意这一点吗?
是的,会的。实体框架(代码优先)和 nhibernate 都可以使用单独的映射类,这将使您的模型干净,而不依赖于 OR/M。
旁注:域模型不应该有属性的公共设置器(在 DDD 中)。因为它有效地将模型逻辑移至模型外部。
假设我为域和数据访问层创建了两个“客户”类。假设城市是必填字段。保存时需要检查这条规则。这应该在域层还是数据访问层或两者中完成?
数据库实体应该只存在于存储库类中,因此不必验证它。正在保存的域模型应该已经具有正确的状态。
Example:
public class ArticleRepository
{
public void Save(Article article)
{
// Article is already in a correct state
// (thanks to no public setters)
var dbEntity = new ArticleEntity();
Mapper.Map(article, dbEntity);
_dbContext.Save(dbEntity);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)