富客户端程序设计实例 - Action层 - 逻辑分支低耦合: Action耦合Entity

11年前


        Action层调用Service层,Service层调用DAO层,DAO层有独立简单的放方法查阅数据库中的数据。根据第一幅图的描述可以看出,设计之初Dao层并没有关联到Entity;而是把Entity与Action关联。DAO层利用方法泛型隔离开一个具体的Entity或者Domain对象(这里没用到领域对象,领域对象与Entity相似)。这样设计的好处是:当我要更换一个Entity的时候,只需要从Action里去更改对应的Entity名字就可以了。
        Dao层示例代码:
[javascript] view plaincopy
  1. public <T> void saveInfo(List<T> list)  
  2.     {  
  3.         Assert.notNull(list, "entity is required");  
  4.         for (T obj : list)  
  5.         {  
  6.             getSession().save(obj);  
  7.         }  
  8.         System.out.println("Function saveInfo has run");  
  9.     }  
        Action层对应代码:
  1. public class EmployeeAction extends BaseAction  
  2. {  
  3.     private Logger log = LoggerFactory.getLogger(Employee.class); //log日志  
  4.   
  5.   
  6.     //调阅数据  
  7.     public void read()  
  8.     {  
  9.         String jsonStr = ajaxJson(service.find(Employee.class));  
  10.     }  
  11.   
  12.     // 保存数据  
  13.     public void add()  
  14.     {  
  15.         String jsonStr = getJsonFromRequest();  
  16.         System.out.println("保存数据 Request" + jsonStr);  
  17.         List<Employee> empList = new ArrayList<Employee>();  
  18.         empList.add(getObjectFromJson(jsonStr, Employee.class));  
  19.         service.saveInfo(empList);  
  20.     }  
  21.   
  22.     //更新数据  
  23.     public void update()  
  24.     {  
  25.         String jsonStr = getJsonFromRequest();  
  26.         System.out.println("更新数据 Request" + jsonStr);  
  27.         List<Employee> empList = new ArrayList<Employee>();  
  28.         empList.add(getObjectFromJson(jsonStr, Employee.class));  
  29.         service.updateInfo(empList);  
  30.     }  
  31.   
  32.     //删除数据  
  33.     public void destroy()  
  34.     {  
  35.         String jsonStr = getJsonFromRequest();  
  36.         System.out.println("删除数据 Request" + jsonStr);  
  37.         List<Employee> empList = getListFromJson(jsonStr, Employee.class);  
  38.         service.delete(empList);  
  39.     }  
  40.   
  41. }  
        红色字体是耦合到的Entity,DAO方法泛型设计方式让分支逻辑上的耦合度降到最低