C# 域逻辑与数据验证
我正忙于阅读和享受MarkSeemann的.Net中的依赖注入 我很难解释确切的上下文,所以如果你熟悉这本书的话,请只回答这个问题 我的问题与第2章第49页中的两个产品类有关。一个在域层,一个在数据访问层。说明了数据访问层中的产品类是由Linq to Entity向导创建的 我正在使用LINQtoSQL,并且我可以用LINgtoSQL属性装饰我的模型类,这样我就不必有第二个类。例如C# 域逻辑与数据验证,c#,linq,architecture,domain-driven-design,entity,C#,Linq,Architecture,Domain Driven Design,Entity,我正忙于阅读和享受MarkSeemann的.Net中的依赖注入 我很难解释确切的上下文,所以如果你熟悉这本书的话,请只回答这个问题 我的问题与第2章第49页中的两个产品类有关。一个在域层,一个在数据访问层。说明了数据访问层中的产品类是由Linq to Entity向导创建的 我正在使用LINQtoSQL,并且我可以用LINgtoSQL属性装饰我的模型类,这样我就不必有第二个类。例如 [Table(Name="Customers")] public class Customer { [Colu
[Table(Name="Customers")]
public class Customer
{
[Column(IsPrimaryKey=true)]
public string CustomerID;
[Column]
public string City;
}
然而,我觉得这是一个复杂的问题,它实际上会将我的域层与Linq到SQL数据访问层紧密耦合。你同意这一点吗
假设我为域和数据访问层创建了两个“客户”类。假设城市是必填字段。保存时,需要检查此规则。这应该在域层或数据访问层中完成,还是同时在两者中完成
非常感谢,Daryn,这将您的域层与DAL连接起来。更糟糕的是,域层实体的结构将与数据库中的表相同。如果这些表是关系表,那么这将不是域模型的最佳表示 我们要做的是让Linq到SQL实体存在于DAL中,然后在DAL中使用映射类将L2S实体转换为域实体,反之亦然。这没关系,因为DAL实际上是你的ORM,它的部分工作就是做这个映射 我想说,如果需要City作为业务规则,那么这就是业务逻辑,属于业务逻辑层中的业务规则。有一些验证包可以帮助解决这个问题 然而,我觉得这是一个复杂的问题,它实际上会将我的域层与Linq到SQL数据访问层紧密耦合。你同意这一点吗 是的,会的。实体框架(代码优先)和nhibernate都可以使用单独的映射类,这将使您的模型干净,而不依赖于OR/M 旁注:域模型不应该有属性的公共设置器(在DDD中)。因为它有效地将模型逻辑移动到模型之外 假设我为域和数据访问层创建了两个“客户”类。假设城市是必填字段。保存时,需要检查此规则。这应该在域层或数据访问层中完成,还是同时在两者中完成 数据库实体应该只存在于存储库类中,因此不必验证它。正在保存的域模型应该已经具有正确的状态 示例:
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);
}
}