0

我正在开发一个使用现有数据库的应用程序,该数据库只能通过存储过程进行访问。大多数这些 SP 从多个表返回列。

我们有一个数据访问层,它从我们的域对象层返回类型的对象。但是,由于 SP 从多个表返回列,我不确定我应该如何构造我的域对象,因为它们中的大多数不会“自然地”映射到从 SP 返回的数据。

示例:存储过程从“Employee”表和“Manager”表返回列:
-EmployeeId
-FirstName
-LastName
-ManagerEmployeeId
-ManagerFirstName
-ManagerLastName

我是否应该创建一个包含与上述列完全匹配的属性的域对象“EmployeeWithManager”?

我应该创建某种包含 Employee 对象和 Manager 对象的“数据访问对象”吗?

不幸的是,不能使用 ORM、参数化查询或更改存储过程。

4

1 回答 1

1

理解。这就是我要做的,仍然创建与您的域匹配的域对象。

原因是

  1. 更容易理解
  2. 假设您使用一个 SP 创建 EmployeeWithManager,如果您有另一个 SP(例如 Employee with Car),您将需要创建 EmployeeWithCar 对象,列表继续,将无法管理,您将有大量工作尝试在两者之间进行转换他们

我的做法,

  • 创建两个域对象,Employee 和 Manager(你的 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;
        }
    }
  • 在您的业务逻辑/用户界面中,
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 回答