zoukankan      html  css  js  c++  java
  • 记录我开发鞋服行业供应链软件的历程<设计业务层>

        有的人说,业务层就是一堆的Manager(或者叫service),为什么还要设计呢?前一句讲的没错,后面这一句就有点欠思考了.我自已总结了一下,如果做一个系统,Manager之间共性的东西还是很多的:
      1):都需要写操作日志
      2):都需要写操作消息,比如保存某个模块的时候,显示“保存成功”的信息给用户.
      3):对于一些简单的模块,简单指的是这个模块只需要对一个表操作(为了方便,称为CRUD模块),比如说ERP信息里的,员工,单位等等。具有通常的功能有:增加,修改,删除,查找,打印等.
      4): 对于一些复杂的模块,复杂指的是主子表结构的模块(为了方便,称为CRUDLine模块),比如说ERP信息里的采购订单,销售订单,销售单等,具有通常的功能有:浏览,增加,修改,删除,增加明细,修改明细,删除明细等.
      5):CRUD模块一般对应Hibernate的一个POJO
      6):CRUDLine模块一般对应Hibernate的两个POJO
      7):都需要传递给表示层,这次操作用哪个页面显示.
      8):都有一个Dao对象.
      9):如果要写浏览功能的伪代码是如下:
      
         //写hql语句 
         String hql=” from Hibernate_POJO ”;
    
         //如果存在过滤条件,加上过滤条件
    
         if(存在:where){
    
               hql=hql+where;
    
         }
         //得到实体的列表
    
         List list=dao.list(hql,pageNumber,limit);
    
         //将实体列表传到页面上显示
    
         request.setAttribute(“datas”,list);
    
    
      10):如果写增加保存功能的伪代码如下:
      
        //new一个pojo对象
    
        Object pojo=new HibernatePojo();
    
        //将页面传回的值绑定到pojo
    
         bindEntity(pojo,form);
    
         //调用dao进行保存
    
         dao.save(pojo);
    
         if(成功){
    
            //写成功的操作日志
    
            writeSuccessLog();
    
            //写成功的提示信息
    
            writeSuccessMessage();
    
         }else{
    
            //写失败的操作日志
    
            writeFailureLog();
    
            //写失败的提示信息
    
            writeFailureMessage();
    
         }
    

         上面只是列举了部分共性的东西,碰到不同系统架构,不同的业务系统,共性的东西不同,共性出现的地点也不同,比如可能会出现在表示层.但只要去总结就可以很容易找的到。找到了共同点,我们就可以好好利用Java反射,再结合Spring,把那些共同点抽象出来,形成系统架构中的业务层。
      【业务层结构】
      BaseEngine->BaseCRUDEngine->CRUDOperatorImpl->CRUDLineOperatorImpl
  • BaseEngine完成的功能有
  •   
     writeSuccessLog:写成功的操作日志
     writeSuccessMessage:写成功的提示信息
     writeFailureLog:写失败的操作日志
     writeFailureMessage:写失败的提示信息
     setDao:设置Dao对象
     forwardJsp:通知表示层返回Jsp
     forwardJson:通知表示层返回Json
     forwardExcel:通知表示层返回Excel
     forwardPdf:通知表示层返回Pdf
    
  • 2:BaseCRUDEngine完成的功能有:
  •   
     getEntityClass:得到实体类(虚函数)
     getTableKeyField: 得到实体类的主键名(虚函数)
     getEntityId:取主键值
     createEntity:生成一个实体对象
     isUniques:判断当前主键对象是否唯一
    
  • 3:CRUDOperatorImpl
  •        
    list:列表功能
    add:进入增加时调用的方法
    addSave:增加保存时调用的方法
    update:修改
    updateSave:修改保存
    view:浏览
    find:查找
    print:打印
    
  • 4:CRUDLineOperatorImpl
  •        
    addLine:增加明细
    addSaveLine:增加保存明细
    updateLine:修改明细
    updateSaveLine:修改保存明细
    deleteLine:删除
    

         从上面可知,我们现在设计的业务层把很多基本的东西抽象出来了,除了让以后的业务层来的更简单外,还可以让每个程序员代码风格一致,阅读代码,维护更方便。如果有特殊的业务逻辑,可以通过重写来达到目的。如果再附上自动代码产生平台,整个系统的开发速度就很快了,而且bug很少.
        附一个简单操作模块的Manager 的代码:
    public class TbsunitManager extends CRUDOperatorImpl
     {
        private static final long serialVersionUID = -1L; 
    
        public TbsunitManager() { 
    
        } 
    
        public Class getEntityClass() {
            return Tbsunit.class;
        } 
    
        public String getTableKeyField() {
            return "tbsunitid";
        } 
    
     }
    
本博客均为原创,转载请注明出处.
查看全文
  • 相关阅读:
    ElasticSearch基本用法
    几款Http小服务器
    【最长上升子序列】HDU 1087——Super Jumping! Jumping! Jumping!
    方差与样本方差、协方差与样本协方差
    方差与样本方差、协方差与样本协方差
    统计推断(statistical inference)
    统计推断(statistical inference)
    R 语言学习(二)—— 向量
    R 语言学习(二)—— 向量
    R 语言的学习(一)
  • 原文地址:https://www.cnblogs.com/mzhanker/p/2080800.html
  • Copyright © 2011-2022 走看看