0

Stored Procs を介して排他的にアクセスされる既存のデータベースを使用するアプリケーションに取り組んでいます。これらの SP のほとんどは、複数のテーブルから列を返します。

ドメイン オブジェクト レイヤーからタイプのオブジェクトを返すデータ アクセス レイヤーがあります。ただし、SP は複数のテーブルから列を返すため、ドメイン オブジェクトのほとんどは SP から返されるデータに「自然に」マップされないため、ドメイン オブジェクトをどのように構築すればよいかわかりません。

例: Stored Proc は、"Employee" テーブルと "Manager" テーブルから列を返します:
-EmployeeId
-FirstName
-LastName
-ManagerEmployeeId
-ManagerFirstName
-ManagerLastName

上記の列と完全に一致するプロパティを含むドメイン オブジェクト「EmployeeWithManager」を作成する必要がありますか?

Employee オブジェクトと Manager オブジェクトを含む "Data Access Object" を作成する必要がありますか?

残念ながら、ORM、パラメーター化されたクエリの使用、またはストアド プロシージャの変更はオプションではありません。

4

1 に答える 1

1

理解。これは私が行うことですが、ドメインに一致するドメイン オブジェクトを作成します。

理由は

  1. より分かりやすく
  2. 1 つの SP で EmployeeWithManager を作成すると仮定すると、別の SP (たとえば Employee with Car) がある場合、EmployeeWithCar オブジェクトを作成する必要があります。リストは続き、管理できず、その間で変換しようとする多くの作業が必要になります。彼ら

私のアプローチ、

  • Employee と Manager という 2 つのドメイン オブジェクトを作成します (Manager は Employee を継承することもできます)。
  • Employee で、Manager への参照/関係を作成します。
Class Employee{

    String Id;
    String FirstName;
    ...

    Manager EmployeeManager;

}
  • SP を使用するデータ アクセス レイヤーを作成します。
 Class EmployeeDAL{

        Employee GetEmployeeWithManager(string EmployeeId){
            //user data reader to populate your Employee object and fill it with Manager
            Manager m = New Manager(); //fill Manager from SP
            Employee e = New Employee(); //fill Employee from SP

            e.EmployeeManager = m;
            return e;
        }
    }
  • ビジネス ロジック/UI で、
Class EmployeeController{
     PopulateEmployee(string EmployeeId){
          Employee e = EmployeeDAL.GetEmployeeWithManager(EmployeeId);
          Databind(e);
          'you can also access your manager from e.EmployeeManager
     } 

}

于 2013-02-01T23:05:39.720 に答える