C# 基于实体框架和存储库模式的领域驱动设计
我曾经处理过一些简单的应用程序,它们的服务层包含了所有的业务逻辑。在领域驱动的设计中,通常将业务逻辑保持在一个丰富的模型中 观看了Pluralsight的一个教程,其中他们提到了存储库,并注意到repo通常包含基本的CRUD操作创建、更新、获取和删除实体。关于实体框架,没有做太多解释 实体框架6和实体框架核心已经提供了现成的存储库/UoW。我想知道在这种情况下是否可以省略创建存储库层 因此,我如何想象没有独立存储库层的应用程序 我的理解是: 例如,我们将客户模型作为聚合的根丰富域模型。该模型与收款付款之间存在一对多关系。另外,根据DDD,我们将我们的逻辑保留在模型中,因此我们有了支付方法 代码如下:C# 基于实体框架和存储库模式的领域驱动设计,c#,entity-framework,domain-driven-design,repository-pattern,C#,Entity Framework,Domain Driven Design,Repository Pattern,我曾经处理过一些简单的应用程序,它们的服务层包含了所有的业务逻辑。在领域驱动的设计中,通常将业务逻辑保持在一个丰富的模型中 观看了Pluralsight的一个教程,其中他们提到了存储库,并注意到repo通常包含基本的CRUD操作创建、更新、获取和删除实体。关于实体框架,没有做太多解释 实体框架6和实体框架核心已经提供了现成的存储库/UoW。我想知道在这种情况下是否可以省略创建存储库层 因此,我如何想象没有独立存储库层的应用程序 我的理解是: 例如,我们将客户模型作为聚合的根丰富域模型。该模型与收
public class Customer
{
public virtual ICollection<Payment> Payments { get; set; }
// ... other properties/collections
public void MakePayment(decimal amount)
{
this.Payments.Add(new Payment() { Amount = amount });
}
}
使用实体框架,我们可以急切地加载整个树,结果是客户已经映射了他们的所有付款
比如说,我们处理的是一个ASP.NET WebAPI应用程序
因此,为了付款,我想,我们应该做以下几点:
在我们的控制器/服务中,我们通过id获取客户
然后遵循代码customer.MakePayment10
然后我们调用dbContext.SaveChanges方法
DbContext跟踪更改并存储付款-宾果
我的理解正确吗
关于服务层:
在这样的web应用程序中使用带有DDD的服务层可以吗
我仍然认为,即使使用DDD,将代码保存在控制器中也不一定是正确的做法,因为WPF应用程序可能需要部分功能,因此我们可以使用服务层
似乎是最理想的方法,不是吗?我想知道在这种情况下我们是否可以省略创建存储库层
在我看来,您不能忽略存储库层。通常,存储库负责保存和重建聚合根,而域实体不是数据库实体。EF实体不是您的域实体
在这样的web应用程序中使用带有DDD的服务层可以吗
当然,您可以保留您的服务层,实际上,您可以在DDD中称之为应用层,但您需要注意这一层中应该包含什么
我想知道在这种情况下是否可以省略创建存储库层
如第一段所解释的,请考虑直接使用泛型存储库dBET。避免创建额外的存储库层
我的理解正确吗 依我看,若你们已经按照你们在问题模式中所解释的每个请求正确地实施了工作单元会话,那个么你们的理解是正确的。这就是它应该如何工作 在这样的web应用程序中使用带有DDD的服务层可以吗 使用DDD,域模型包括相关逻辑。但是,始终存在不属于任何领域模型的逻辑。这种逻辑通常在服务中使用。因此,是的,您可能仍然需要DDD服务。仅此而已,它不会包含您的所有逻辑,因为大部分逻辑都在模型中