CRUD设计

时间:2011-11-03 03:49:24

标签: c# oop design-patterns

我需要设计CRUD应用程序。数据库中有三个表 - 员工,销售和客户。这些表的值有三种不同的电子表格。我的应用应该定期查看电子表格并更新相应的表格。我想出了以下设计

EmpMgr - EmpDAL - EmpDAO

SalesMgr - SalesDAL - SalesDAO

CustMgr - CustDAL - CustDAO

我的主应用程序中的计时器将定期在配置的位置获取电子表格,并在EmpMgr,SalesMgr或CustMgr中调用Parse功能。各个类解析文件并形成“Vector of EmpDao / SalesDao / CustDao”并调用相应的DAL来更新表。

我对这种方法的担忧是

  1. 可以在所有Mgr类中重复解析excell文件。如果我想创建一个通用的解析器,我应该如何让它返回具体的“矢量DAO”?
  2. 今天,来自excell的数据可能会被改为XML甚至是Web服务。我应该如何确保我的设计适应变化?

1 个答案:

答案 0 :(得分:1)

你错过了模型(想想MVC)。这应该解决你的问题。我认为你不需要DAL层。

例如,包含员工列表的excel表。你应该为员工准备一个具体的课程。员工列表可以保存在列表容器中。您的DAO将解析excel,并将每一行转换为员工对象,或接受员工对象并将其作为一行添加到Excel中。

对于您的第一个问题,您的代码可能如下所示。

class EmployeeManager()
{
   ...

   public void CreateEmployee(Employee employee)
   {
       dao.Add(employee);
   }

   public void CreateEmployees(List<Employee> employees)
   { 
       dao.AddMany(employees);
   }

   ...

   public List<Employee> GetAllEmployees()
   {
       List<Employee> employees = dao.GetAll();
       employees.Sort();
   }

   ...
}

class Employee()
{
   Employee(string name, string job)
   {
      Name = name;
      Job = job;
   }

   ...

   string Name { get; set; }
   string Job { get; set; }
}

class EmployeeDAO()
{

   ...

   public List<Employee> GetAllEmployees() 
   {

        List<Employee> employees = new List<Employee>;

        //parse all rows and make make employee objects out of them.

        return employees;           
   }

}

对于Q1,通过使用该模型,您将使用C#提供的容器来保存员工列表,可以对其进行搜索,排序,修改等,并且已经为您完成了代码,尝试并测试了你和那些比你聪明的人写的。

对于Q2,如果将Excel从Excel更改为XML或其他任何内容,则只需修改DAO即可。使用管理器的任何东西只需要使用模型中的类,并使用C#中已有的容器。