小编Fra*_*ing的帖子

保持聚合之间的一致性

我想知道如何解决聚合之间的事务一致性问题.我的第一印象是,无论何时需要聚合之间的事务一致性,您都错误地设计了聚合.但是,我仍然想问这个问题,以确保我没有遗漏任何东西.

想象一下,你卖牛奶.你有多头奶牛,每头奶牛每天产一定量的牛奶.您需要一项能够获得库存牛奶量的服务.除此之外,您还应该能够订购牛奶.根据此信息,您可以创建三个聚合Cow,StockOrder.每当订购一定数量的牛奶时,其中一个业务规则是检查该金额是否有库存,如果没有,请立即告知用户.当两个用户同时发出请求并订购总量为150升的牛奶时,如何才能实现这一目标,而只有130升可用?我的第一个想法是你可以通过乐观/悲观锁定实现这一点,但在这种情况下,一个聚合依赖于另一个.是否有某种方法可以解决这个特定的问题,或者这只是糟糕的聚合设计?

domain-driven-design consistency aggregateroot

4
推荐指数
1
解决办法
236
查看次数

如何将域模型设置为actor?

我对Scala和Akka都很陌生,我正在试图弄清楚如何创建一个合适的域模型,它也是一个Actor.

让我们假设我们有一个简单的商业案例,您可以在其中开设一个新的银行账户.假设其中一条规则是您只能为每个姓氏创建一个银行帐户(不现实,但仅为了简单起见).我的第一种方法,没有应用任何业务规则,看起来像这样:

object Main {
  def main(args: Array[String]): Unit = {
    implicit val system = ActorSystem("accout")
    implicit val materializer = ActorMaterializer()
    implicit val executionContext = system.dispatcher
    val account = system.actorOf(Props[Account])
    account ! CreateAccount("Doe")
  }
}

case class CreateAccount(lastName: String)

class Account extends Actor {

  var lastName: String = null

  override def receive: Receive = {
    case createAccount: CreateAccount =>
      this.lastName = lastName
  }
}
Run Code Online (Sandbox Code Playgroud)

最终你会在某个地方保留这些数据.但是,在添加每个姓氏只能有一个银行帐户的规则时,需要对某些数据存储进行查询.假设我们将该逻辑放在存储库中,并且存储库最终返回一个Account,我们得到的问题Account不再是Actor,因为存储库将无法创建Actors.

这绝对是一个错误的实现,而不是如何使用Actors.我的问题是,有什么方法可以解决这些问题?我知道我对Akka的了解还不是很好,所以这可能是一个奇怪/愚蠢的问题.

domain-driven-design scala akka

2
推荐指数
2
解决办法
617
查看次数