CQRS在哪里放置域/业务逻辑

时间:2013-10-06 18:31:29

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

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

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

实施例。 我有银行账户的借记账户命令。我已将命令DebitAccount和处理程序创建为IDebitAccountHandler。 IDebitAccountHandler将在基础架构层中实现,并具有所需的依赖关系DebitAccountHandler。

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

现在我应该在哪里实现此逻辑并加载所需的依赖项。我的命令是没有任何方法体的接口,它们只包含Handle / Execute方法。

我觉得这是新手问题,因为我对模式的理解有限。

1 个答案:

答案 0 :(得分:2)

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

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

public class Account
{
    private Balance _balance;

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