当涉及多个聚合时,我对域应该执行业务规则的方式表示怀疑。
假设我有帐户和外部帐户聚合:
public class Account {
public String getId() {...}
public void add (Double amount) {}
}
public class ExternalAccount {
public String getId() {...}
public void add (Double amount) {}
}
和这项服务:
public class TransferService implements TransferServiceInterface {
public void transfer (String AccountId, String ExternalAccountId, Double amount) {
Account fromAccount = accRepository.get(AccountId);
ExternalAccount toAccount = extAccRepository.get(ExternalAccountId);
transferIsValid(fromAccount, toAccount, amount);
fromAccount.add(-amount);
toAccount.add(amount);
}
}
如果传输不符合域规则,则 transferIsValid 将抛出异常。
如何防止此模型的用户不使用服务并执行以下操作:
Account fromAccount = accRepository.get(AccountId);
ExternalAccount toAccount = extAccRepository.get(ExternalAccountId);
fromAccount.add(-amount);
toAccount.add(amount);
用户没有使用该服务,也没有使用 transferIsValid(...) 来检查完整性。我相信我的设计存在错误,因为用户不应该做一些无效的事情。我该如何预防?我的设计中的错误在哪里?