【问题标题】:CQRS where to put domain / business logicCQRS 在哪里放置域/业务逻辑
【发布时间】:2013-10-06 18:31:28
【问题描述】:

我正在为 MVC 应用程序开发框架。作为框架的一部分,我创建了一个虚拟应用程序。我正在使用 CQRS 遵循 Onion Architecture 和 SOLID 原则。这是我第一个使用 MVC 和 CQRS 的项目。我也在关注 CQRS 中的责任链。

目前我不确定应该保留业务逻辑的部分。

示例。 我有银行账户的借记账户命令。我已将命令创建为 DebitAccount,并将处理程序创建为 IDebitAccountHandler。 IDebitAccountHandler 将在基础设施层实现,所需依赖项为 DebitAccountHandler。

在这里,我有在借记帐户之前检查余额的核心逻辑。我想在 Core 中实现它,因为它不会随基础设施而改变。

现在我应该在哪里实现这个逻辑并加载所需的依赖项。我的命令是没有任何方法主体的接口,它们也只包含处理/执行的方法。

我觉得这是一个新手问题,由于我对模式的理解有限。

【问题讨论】:

  • 我不熟悉域,但一般来说,您可以实现域模型(如帐户)或域服务(如果这涉及多个模型)的检查,然后在处理程序中调用检查器.

标签: asp.net-mvc domain-driven-design cqrs solid-principles


【解决方案1】:

每个命令代表一个用例。命令处理程序不包含任何逻辑;它负责处理基础设施问题,并委托给域。

您希望所有逻辑都在您的域模型中:聚合、实体、值对象、服务...在您的示例中,逻辑将由 Account 聚合封装。

public class Account
{
    private Balance _balance;

    public void Debit(Amount amount) 
    {
        if (_balance.IsSufficient())
                // debit..
    }
}

【讨论】:

    猜你喜欢
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2017-11-06
    相关资源
    最近更新 更多