• Java_业务层开发


    业务是整个项目的核心,每一个业务的处理都是由控制层调用的(本次不考虑控制层,只考虑客户端直接调用业务层的形式),所以整个代码里业务层依然是一个标准,控制层要想取得业务层对象,一定也是依靠工厂类。

    1.定义业务层开发标准

    考虑到日后要加入事物的控制问题,所以建议方法上要有一些特殊的考虑,请使用正常的名字。例如: insert() update()

    将所有的业务层都保存在service的子包下

    范例:定义IEmpService

    如果数据层的标准定义是根据实体表来决定的,那么业务层可不是与表一一对应的。

    package xxx.service;
    
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import xxx.vo.Emp;
    
    public interface IEmpService {
        /**
         * 实现雇员信息增加操作,在本操作中需要使用IEmpDAO接口中的如下方法:<br>
         * <li>首先要利用IEmpDAO.findByID()方法判断要增加的雇员编号是否存在。</li>
         * <li>如果雇员编号不存在,则使用IEmpDAO.doCreate()方法保存雇员信息</li>
         * @param vo 包含了要增加数据的VO类对象
         * @return 数据增加成功返回true,否则返回false
         * @throws Exception IEmpDAO接口中的抛出异常
         */
        public boolean insert(Emp vo) throws Exception;
        /**
         * 实现数据的修改操作,调用的是IEmpDAO.doUpdate()方法,此操作属于全部修改
         * @param vo 包含要修改的数据信息
         * @return 修改成功返回true,否则返回false
         * @throws Exception IEmpDAO接口中的抛出异常
         */
        public boolean update(Emp vo) throws Exception;
        /**
         * 实现数据的批量删除操作,在本操作中需要执行如下调用:<br>
         * <li>判断要删除数据传入的集合内容是否为空(判断null以及size)</li>
         * <li>如果确定有删除的数据,则调用IEmpDAO.doRemove()方法删除</li>
         * @param ids 包含了要删除数据的所有ID内容
         * @return 删除成功返回true,否则返回false
         * @throws Exception IEmpDAO接口中的抛出异常
         */
        public boolean delete(Set<Integer> ids) throws Exception;
        /**
         * 根据雇员编号查询出一个雇员的完整信息,调用的是IEmpDAO.findById()方法查询
         * @param id 要查询的雇员编号信息
         * @return 如果可以查询到雇员则以VO的形式返回,如果查询不到则返回null
         * @throws Exception IEmpDAO接口中的抛出异常
         */
        public Emp get(int id) throws Exception;
        /**
         * 查询雇员的全部数据,调用的是IEmpDAO.findAll()方法查询
         * @return 所有的查询记录,以List集合返回
         * @throws Exception IEmpDAO接口中的抛出异常
         */
        public List<Emp> list() throws Exception;
        /**
         * 实现数据模糊查询操作,同时会返回符合查询要求的数据量,本次操作要调用以下的功能:<br>
         * <li>调用IEmpDAO.findAllSplit()方法,分页查询要显示的数据</li>
         * <li>调用IEmpDAO.getAllCount()方法,统计数据的个数</li>
         * @param column 模糊查询字段
         * @param keyWord 模糊查询关键字
         * @param currentPage 当前所在页
         * @param lineSize 每页显示的长度
         * @return 本方法要返回两个数据,所有使用Map集合返回,出现的内容如下:<br>
         * <li>key = allEmps、value = IEmpDAO.findAllSplit(),返回的是List&lt;Emp&gt; </li>
         * <li>key = empCount、value = IEmpDAO.getAllCount(),返回的是Integer</li>
         * @throws Exception IEmpDAO接口中的抛出异常
         */
        public Map<String,Object> listSplit(String column,String keyWord,int currentPage,int lineSize) throws Exception;
    }

    2.定义业务层实现类

    注意事项:

      要通过DAOFactory找到所需要的数据层的接口;

      要控制DatebaseConnection类取得Connection接口对象;

      不管操作如何,最后一定要关闭数据库,如果有异常交给被调用处处理;

    可以在xxx.service.impl子包中定义业务层的实现子类

    范例:定义EmpServiceImpl子类

    package xxx.service.impl;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import xxx.dbc.DatabaseConnection;
    import xxx.factory.DAOFactory;
    import xxx.service.IEmpService;
    import xxx.vo.Emp;
    
    /**
     * 当取得了本类对象时,就意味着可以进行数据库操作了。
     * @author James
     *
     */
    public class EmpSericeImpl implements IEmpService {
        private DatabaseConnection dbc = new DatabaseConnection();
        @Override
        public boolean insert(Emp vo) throws Exception {
            try {
                //利用DAOFactory类中的getIEmpInstance()方法取得IEmpDAO接口对象
                //在调用getIEmpInstance()的时候需要通过DatabaseConnection对象取得Connection接口对象,传递进去
                //调用IEmpDAO接口中findById()方法判断要增加的雇员编号是否存在
                if(DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).findById(vo.getEmpno()) == null) {
                    return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).doCreate(vo);
                }
                return false;
            }catch (Exception e) {
                throw e;
            }finally {
                this.dbc.close();;
            }
        }
    
        @Override
        public boolean update(Emp vo) throws Exception {
            try {
                return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).doUpdate(vo);
            }catch (Exception e) {
                throw e;
            }finally {
                this.dbc.close();;
            }
        }
    
        @Override
        public boolean delete(Set<Integer> ids) throws Exception {
            try {
                if(ids.size() == 0) { //没有要删除的数据
                    return false;
                }
                return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).doRemove(ids);
            }catch (Exception e) {
                throw e;
            }finally {
                this.dbc.close();;
            }
        }
    
        @Override
        public Emp get(int id) throws Exception {
            try {
                return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).findById(id);
            }catch (Exception e) {
                throw e;
            }finally {
                this.dbc.close();;
            }
        }
    
        @Override
        public List<Emp> list() throws Exception {
            try {
                return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).findAll();
            }catch (Exception e) {
                throw e;
            }finally {
                this.dbc.close();;
            }
        }
    
        @Override
        public Map<String, Object> listSplit(String column, String keyWord, int currentPage, int lineSize)
                throws Exception {
            try {
                Map<String,Object> map = new HashMap<String,Object>();
                map.put("allEmps", DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).findAllSplit(column, keyWord, currentPage, lineSize));
                map.put("empCount", DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).getAllCount(column, keyWord));
                return map;
            }catch (Exception e) {
                throw e;
            }finally {
                this.dbc.close();;
            }
        }
    
    }

    3.定义业务层工厂类

    由于最终业务层是要留给控制层使用的,所以必须有工厂类,但是与数据层工厂类相比,业务层的工厂类不需要传递参数。

    package xxx.factory;
    
    import xxx.service.IEmpService;
    import xxx.service.impl.EmpSericeImpl;
    
    public class ServiceFactory {
        public static IEmpService getIEmpServiceInstance() {
            return new EmpSericeImpl();
        }
    }

     

  • 相关阅读:
    2020年3月15日python学习笔记——变量的创建过程 垃圾回收机制 变量的指向关系
    2020年3月14日python学习笔记——学习实操的程序(第一小章)--------------------重要
    2020年3月14日python学习笔记——break ,continue,while ...else....
    2020年3月14日python学习笔记——流程控制语句(if else ,while)
    2020年3月14日python学习笔记——算数运算、比较运算、逻辑运算、赋值运算
    2020年3月14日python学习笔记——列表 输入命令符
    Ubuntu 安装mysql和修改字符编码
    死锁与递归锁
    守护线程
    线程
  • 原文地址:https://www.cnblogs.com/lonske/p/8909817.html
Copyright © 2020-2023  润新知