ビジネス計算を実行し、データベースにレコードを作成する必要がある状況があります(私はかなり標準的です)。ある時点で何かがうまくいかない場合は、データベースからすべてをロールバックする必要があります。うーん、私はある種の取引が必要です。私の質問は、トランザクションサポートを実装する場所です。ここに私の例がありますビジネスプロセスとリポジトリパターンとのトランザクションの使用
//BillingServices - This is my billing service layer. called from the UI
public Result GenerateBill(BillData obj)
{
//Validate BillData
//Create a receivable line item in the receivables ledger
BillingRepository.Save(receivableItem);
//Update account record to reflect new billing information
BillingRepository.Save(accountRecord);
//...do a some other stuff
BillingRepository.Save(moreStuffInTheDatabase);
}
データベースの更新が失敗した場合は、他のものをロールバックして脱出する必要があります。私はちょうど私が
Connection.BeginTransactionを(呼び出すことができますここで、私のリポジトリを介した接続オブジェクト)
を公開したり、私はちょうどサービス層に検証し、ちょうどすべて保存し、リポジトリに1つのメソッドを呼び出して行うのですかオブジェクトとトランザクションを処理する?これは私にとっては正しそうに見えません。データレイヤーに多くのビジネスロジックを置く必要があるようです。
正しいアプローチは何ですか?リポジトリを広げる必要がある場合(またはそれが悪い設計の場合)はどうでしょうか?
+1、良い質問があります。 –
うまくいけばよい答えを得るでしょう=)。実際には、この時点での答えはいいです – Micah