2

この投稿の長さについてお詫び申し上げますが、回答の可能性を高めるために、できるだけ詳細を提供したいと思いました. 前もって感謝します。

複数のデータベースからのデータを統合する既存のアプリケーションに新しい機能を追加しています。つまり、クライアントやその会計士が自分の場所に関する財務情報にアクセスして更新できるようにします。アプリケーションには、Web クライアント (これをすぐに Silverlight クライアントに置き換えることを考えています)、アプリ サーバーで実行されるサービス層、およびデータベース層の 3 つの層があります。

私が所有権を取得したとき、アプリケーションは 3 層であるにもかかわらず、非常に単純化されていました。すべてに ADO.NET を使用しており、Web サービスはデータベースの 1 つでの動的 (文字列) SQL クエリの単なるパススルーです。私の最初の仕事は、既存のコードを「クリーンアップ」することでした。アプリにはオブジェクト指向はなく、すべてがフラットでした。LINQ-to-SQL を活用するためにアプリケーションのリファクタリングを開始し、リポジトリ パターンを実装してビジネス ロジックをテスト可能にしました (言うまでもなく、データ アクセス テクノロジを ADO.NET から L2S に進化させ、できればさらにEntity Framework) を実装し、実際に .NET の機能を使用するようにコードを作り直しました。

ほとんどの場合、すべてのページが (Web サービスを介して) データベース内のテーブルまたはビューに対する単純なクエリであるため、Web アプリは簡単なものです。アプリ サーバー側では、各データベースの DataContext と各エンティティのリポジトリ (または DDD 用語を使用した集約ルート) になりました。コンストラクター インジェクション (Castle Windsor) を使用して、サービス クラスに適切なリポジトリ インスタンスを設定し、リポジトリで使用される DataContext にも同様に設定します。

4 つのデータベースにまたがるロジックを必要とするアプリケーションに編集機能を追加する必要があり、適切なアプローチが見つからないことを除けば、これで問題ありません。アプリのフローとアーキテクチャが一貫しており、ジュニア グレードの開発者が保守できることが重要です。(私を除けば、チームは基本的に VB6 開発者であり、VS と BCL を使用しているため、.NET をプログラミングしていると考えています。彼らは、パターン、プラクティス、単体テスト、モックなどについてほとんど知りません) </ p>

編集ビューを機能させるために必要なものを見ていきましょう。

  1. ページが最初に読み込まれると、「編集可能な」会計期間のリストが生成されます。
    1. このリストは、SQL Server データベース (「メタデータ」データベースと呼びます) に含まれる一連のルールに基づいています。表の各行は、会計期間を編集可能な時間枠とともに名前で識別します。
    2. これらのルールは、期間名と年を実際の日付にマップする DB2 財務データベースのテーブルを照会するために使用されます。このクエリは、終了日が過去で、終了日 (終了日と上記の編集の長さ) が今日より後のすべてのエントリを返します。
  2. このページでは、選択した期間がデフォルトで最新のものになります。期間が選択されると、選択した期間中に現在のユーザーが編集できる場所のリストを作成する別のリクエストを発行します。
    1. まず、「Security」データベースからユーザーのセキュリティ情報を調べて、そのユーザーが Accountants ロールに属しているかどうかを判断する必要があります。その場合、メタデータ データベースにクエリを実行して、現在のユーザーのクライアントのリストを取得する必要があります。そうでない場合は、現在のユーザーの clientID を使用します。
    2. 次に、DB2 財務データベースにクエリを実行して場所のリストを取得し、選択した期間とユーザーがアクセスできる clientID のリストに基づいてフィルタリングします。また、ステータスに基づいてフィルタリングするため、その期間中にアクティブだった場所のみを返します。
  3. ピリオドと同様に、ページは選択された場所をリストの最初の場所にデフォルト設定します。場所が選択されると、選択した期間中のその場所の実際の財務データをもう一度要求します。
    1. このリクエストは「ステージング」データベースに対して行われ、非常に簡単です。
  4. ユーザーが別の期間または場所を選択すると、このすべてが繰り返されます。

それでは、#2 を取り上げて、Unit Of Work パターンと Repository パターンを使用してサービス アプリケーションにこれを実装する方法について説明しましょう。まだEFにジャンプしていないので、そのデータベースを操作するときにADO.NETを使用する必要があります。しかし、彼らはいつでも気が変わる可能性があるため、可能な限りデータアクセス技術にとらわれないソリューションが欲しいので、それであなたを遅らせないでください. 実際、彼らはパラダイムをシフトし、現時点で私が知っている限りで NHibernate に移行することができます。私はサービス ファサードから DataContext に到達することに関心があり、DataContext (または ObjectContext) がどのように実装されているかについてはあまり関心がありません。

現在のユーザーの資格情報と選択した会計期間を使用して Web サービス メソッドを呼び出し、上記の #2 で説明した手順を実行し、適切な場所のリストを返す実装について説明してもらえますか?

ふぅ… 理解するのが大変でした。整理してくれてありがとう。

4

0 に答える 0