业务层设计

一.业务层的设计

概念:
  mvc 设计模式, 其中 M 表示 Modle 层(模型层), 其中模型层包括了数据层(dao) 和业务层(servive).
  业务层最终是被控制层调用了,此时如果修改了业务层的代码那么控制层的代码也随之要修改,耦合度较高
  要解决这样的问题需要为业务层定义一套标准(一个接口)

1.定义出 service 层的接口 (IEmpService)

 1 public interface IEmpService {
 2     /**
 3      *     实现数据的增加 调用 dao 层的 insert()方法
 4      * @param vo 包含了要插入的数据的 vo 对象
 5      * @return 成功返回 true 否则返回 false
 6      */
 7     public boolean addEmp(Emp vo);
 8     /**
 9      *     根据编号删除数据 调用 dao 层的 deleteById()方法
10      * @param id 要删除的数据的编号
11      * @return 成功返回 true 否则返回 false
12      */
13     public boolean removeEmpById(Integer id);
14     /**
15      *     修改数 调用 dao 层的 update() 方法
16      * @param vo 保存了要修改的数据的 vo 对象
17      * @return 修改成功返回 true 否则返回 false
18      */
19     public boolean editEmp(Emp vo);
20     /**
21      *     根据编号查询数据
22      * @param id 要查询的数据编号
23      * @return 有数剧返回 Emp 对象 否则返回 null
24      */
25     public Emp findEmpById(Integer id);
26     /**
27      *     实现模糊分页查询, 调用 dao 层的方法
28      *     <li>调用 selectSplitAll() 方法,取得雇员信息的集合</li>
29      *     <li>抵用 selectCount() 方法, 取得查询到的数据量
30      * @param kw 模糊查询的关键字
31      * @param cp 当前页
32      * @param ls 每页显示的数据量
33      * @return 保存雇员集合与数据量的 Map 对象
34      */
35     public Map<String,Object> findAllSplit(String kw,Integer cp, Integer ls);
36     /**
37      *     批量删除数据
38      * @param ids 保存了要删除的数据的编号的集合
39      * @return 删除的行数
40      */
41     public boolean removeBacth(List<Object> ids);
42 }

2.定义出 service 接口的实现类

  1 public class EmpServiceImpl implements IEmpService {
  2     //获取连接对象
  3     private Connection conn = DBUitl.getConnection();
  4     
  5     //需要调用数据层的方法所以需要确定数据层的实现类对象
  6     private IEmpDAO empDAO = new EmpDAOImpl(conn);
  7 
  8     @Override
  9     public boolean addEmp(Emp vo) {
 10         try {
 11             //可能需要事务处理 (取消事务的自动提交)
 12             return this.empDAO.insert(vo)>0;
 13             //可能需要事务处理 (提交事务)
 14         } catch (Exception e) {
 15             e.printStackTrace();
 16             //可能需要事务处理 (事务回滚)
 17         } finally {
 18             DBUitl.close(conn);
 19         }
 20         return false;
 21     }
 22 
 23     @Override
 24     public boolean removeEmpById(Integer id) {
 25         try {
 26             //可能需要事务处理 (取消事务的自动提交)
 27             return this.empDAO.deleteById(id)>0;
 28             //可能需要事务处理 (提交事务)
 29         } catch (Exception e) {
 30             e.printStackTrace();
 31             //可能需要事务处理 (事务回滚)
 32         } finally {
 33             DBUitl.close(conn);
 34         }
 35         return false;
 36     }
 37 
 38     @Override
 39     public boolean editEmp(Emp vo) {
 40         try {
 41             //可能需要事务处理 (取消事务的自动提交)
 42             return this.empDAO.update(vo)>0;
 43             //可能需要事务处理 (提交事务)
 44         } catch (Exception e) {
 45             e.printStackTrace();
 46             //可能需要事务处理 (事务回滚)
 47         } finally {
 48             DBUitl.close(conn);
 49         }
 50         return false;
 51     }
 52 
 53     @Override
 54     public Emp findEmpById(Integer id) {
 55         try {
 56             //可能需要事务处理 (取消事务的自动提交)
 57             return this.empDAO.selectById(id);
 58             //可能需要事务处理 (提交事务)
 59         } catch (Exception e) {
 60             e.printStackTrace();
 61             //可能需要事务处理 (事务回滚)
 62         } finally {
 63             DBUitl.close(conn);
 64         }
 65         return null;
 66     }
 67 
 68     @Override
 69     public Map<String, Object> findAllSplit(String kw, Integer cp, Integer ls) {
 70         Map<String,Object> map = new HashMap<String, Object>();
 71         try {
 72             //查询雇员的信息
 73             map.put("emplist",this.empDAO.selectSplitAll("%"+kw+"%", cp, ls));
 74             //统计数据量
 75             int number = this.empDAO.selectCount(kw);
 76             //计算出总的页数
 77             //int allPages = number/ls+number%ls==0?0:1;
 78             //int allPages = (int)Math.ceil(number/(double)ls));
 79             map.put("count",number);
 80             map.put("allPages",(int)Math.ceil(number/(double)ls));
 81             map.put("kw",kw);
 82             map.put("cp",cp);
 83             map.put("ls",ls);
 84             return map;
 85         } catch (Exception e) {
 86             e.printStackTrace();
 87         } finally {
 88             DBUitl.close(conn);
 89         }
 90         return null;
 91     }
 92 
 93     @Override
 94     public boolean removeBacth(List<Object> ids) {
 95         try {
 96             //可能需要事务处理 (取消事务的自动提交)
 97             return this.empDAO.deleteBatch(ids)>0;
 98             //可能需要事务处理 (提交事务)
 99         } catch (Exception e) {
100             e.printStackTrace();
101             //可能需要事务处理 (事务回滚)
102         } finally {
103             DBUitl.close(conn);
104         }
105         return false;
106     }
107 }

测试

1 public class Test {
2     public static void main(String[] args) throws Exception {    
3         IEmpService empService = new EmpServiceImpl();
4         Map<String,Object> map = empService.findAllSplit("A", 1, 10);
5         System.out.println("查询到的数据量是:" + map.get("count"));
6         System.out.println("雇员信息是: " + map.get("emplist"));
7     }
8 }

 

上一篇:考点!!js声明前置时候,是变量声明先前置还是函数声明先前置?


下一篇:STL中的map/multimap小结