サービス層で行われる「ビジネス検証」の処理について質問があります。以下のコードは、十分な資金があることを検証する典型的な口座送金の例を示しています。送金金額は、定義された制限よりも少なくなっています。
この例では、呼び出し元はActionクラスで定義された例外を処理してキャッチし、対応するActionErrorを使用してエラーメッセージを表示する必要があります。
すべてのビジネス検証に例外を使用することは「必須」ですか?
これに例外を使用しないことにした場合、特定の意味で、ビジネスレイヤー(結合/凝集度に違反する)ルールで対応するActionErrorを定義する必要があります。
サービス層によってActionクラスに伝播するメッセージをどのように処理する必要がありますか?
public void transfer(String fromAccount, String toAccount, double amount) throws InsufficientFundsException, TransferLimitException, FactoryException {
try {
Account from = getAccountHome().findByPrimaryKey(
new AccountKey(fromAccount));
Account to = getAccountHome().findByPrimaryKey(
new AccountKey(toAccount));
if (from.getBalance() < amount)
throw new InsufficientFundsException(); // Add action errors
if (from.getTransferLimit() > amount)
throw new TransferLimitException(); // Add action errors
to.deposit(amount);
from.withdraw(amount);
} catch (Exception e) {
throw new FactoryException(
"cannot perform transfer. Nested exception is " + e);
}
}