クレジット/デビットライントランザクションをログに記録せずに、アカウント残高テーブルを更新するアプリケーションが10個あります(理由は不明)。それらはすべて同じSQLステートメントを持っています。この構造から抜け出し、トランザクションをログに記録するために、以下を提案します。最後の方法を見直して、設計をより最適化または抽象化するために推奨される他の方法はありますか?
現在の構造:
10アプリケーション--->埋め込みSQL --->データベースのバランスを更新
より良い構造:
10個のアプリケーション--->リポジトリC#Linq --->データベースのバランスを更新
最も抽象的な構造:
10個のアプリケーション--->サービスレイヤー->(TransactionLineリポジトリ---->アカウント残高リポジトリを含む)--->トランザクションとアカウント残高テーブルを更新します
domain のアカウンティングには、次の異なるが関連する概念があります。
基本的な(ここでは多少単純化された)概念のほかに、すべての場合に保証するいくつかのビジネスロジックがあります。
現在のアプローチは、各アプリケーションの品質に非常に敏感です。各アプリケーションはルールを破り、他のすべてのアカウントを混乱させる可能性があります。
Linqのアプローチにより、すべてのアプリケーション間の一貫性が向上します。しかし、特に1つのアプリケーションを更新し、他のアプリケーションを再コンパイル/デプロイするのを忘れた場合は、すべての新しいドメインオブジェクトの一貫した更新を保証できると確信していますか?
より抽象的なアプローチは、よりきれいなアーキテクチャを持っているようです。さらに、サウンドを実装します 懸念の分離 :
したがって、最終的にアプリケーションはアカウンティング計算を実行する必要がなくなります。アプリケーションは、使用するアカウントを取得するためにサービスにクエリを実行し、サービスに一貫したトランザクションを送信します(ある種の [〜#〜] dtoを使用して) [〜#〜] )、および必要に応じて勘定残高を照会します。