【问题标题】:DDDSample, should there be a repository.save in controller?DDDSample,控制器中应该有一个 repository.save 吗?
【发布时间】:2011-12-31 10:28:28
【问题描述】:

我正在查看DDD sample at Codeplex 提供的 .net 的 DDD 示例,并试图了解各个层如何与 DDD 一起工作。

通过示例,我可以看到创建新 Cargo 时,聚合根 Cargo 通过 BookingService.BookNewCargo() 调用中的存储库存储。但是,当我分配新路线或更改目的地(BookingService 中的 AssignCargoToRoute() 或 ChangeDestination() 调用)时,我希望 CargoRepository.Store() 也会被调用。

使用我以前没有使用过的 Nhibernate 的代码示例。

我错过了什么?

换句话说,如果不调用 Store(),聚合如何持久化?

京东

【问题讨论】:

    标签: c# nhibernate domain-driven-design


    【解决方案1】:

    hm,我在域中看到了许多 switch 语句,似乎域中缺少一些核心术语。乍看之下,很多地方似乎都颇有仪式感,但是,这只是第一印象。

    这里使用了 udi dahan 的域事件模式,有一个事件处理程序“货物已分配给路线”,它似乎存储了有问题的对象。注意 domainevents 类与正确事件类的结合使用,我希望这会告诉你是什么触发了商店。

    【讨论】:

    • 感谢您的回复。我刚刚查看了 nhibernate(有史以来第一次),并且有一个 TransactionHandler 类可以提交更改,这样就可以解释为什么修改后的聚合是如何持久化的。但是,我希望 ICargoRepository.Update() 方法存在,但它不存在(考虑到持久性无知,一旦我们修改任何聚合,我们不应该总是在存储库上调用 update() 吗?)
    【解决方案2】:

    这是我编写的示例应用程序:

    http://clientdatasystem.codeplex.com/SourceControl/list/changesets

    这是我的随附博客:

    http://lucidcoding.blogspot.com/2011/10/enterprise-software-architecture-how-to.html

    您可能在我的博客中注意到,我没有将其描述为 DDD,而是遵循域模型模式。它比 Cargo 应用程序更简单,并且可能更适合您的需求。我遵循创建和保存的模式,并且更新和保存您所期望的。我并不是说我的示例比 Eric Evans 的更好(我不敢!),但 Cargo Application 并不完全是一个基本的精简版。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      • 2021-09-12
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多