菜鸟日记之分层

时间:2021-09-05 04:58:20

                                            

                   Java中对象的几种        PO    vo     pojo    javabean     dto

                               

一、PO  (个人理解 实体类)

          PO:persistant object  持久对象   可以看成是与数据库中的表相映射的java对象。最简单的  PO  就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合。 PO中             应该包含任何对数据库的操作。

                       //用于存储数据,与数据库等数据源的数据一一对应,用于各层之间的数据传递。

二、VO(业务逻辑拓展实体)

           VO:value object  值对象。通常用于业务层之间的数据传递,和  PO   一样也是仅仅包含数据而已。但应是抽象出的业务对象 ,可以和表对应,也可以不,这根据业务的需要.个人           得同DTO(数据传输对象),在web上传递。

                       //根据实际的业务要求,扩展实体类或抽象的新的类不必一定与数据库相对应,用于传递数据。

 

三、  DAO(数据访问层对象)

           DAO:data access object  数据访问对象,此对象用于访问数据库。通常和 PO  结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO 对数据库进行相关操            作。

                      DAO的优势: 

                                1.  符合单一性原则,降低了耦合性,提高了代码复用性。

                                 2.采用面向接口编程,实现了开闭原则,降低了代码的耦合性,提高了代码的扩展性,和系统的可移植性。

                      DAO的组成:

                         1.DAO接口:把需要的操作定义在接口中,方便各个数据库分别实现。

                         2.DAO实现类:根据数据库,提供相应的实现类。

                         3.实体类(PO):存储数据

                         4.数据库具类(BaseDao):便于数据库的操作,避免代码重复。

                              

四、  BO(业务逻辑层对象)

           BO:business object 业务对象 封装业务逻辑的 java对象,通过调用DAO方法,结合  PO,VO 进行业务操作。

                        //被显示层调用,作用主要是隔离数据访问层和显示层。           

 

五 、 JavaBean ()

        JavaBean : 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法         将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 的属性。

                       //JavaBean可以实现代码的重复利用,另外对于程序的易维护性等等。 

六、 POJO ()

           POJO:plain ordinary java object 简单无规则 java对象, POJO是这样的一种“纯粹的”JavaBean,在它里面除了JavaBean规范的方法和属性没有别的东西,即private属性以及对这个属性方法的public的get和set方法。我们会发现这样的JavaBean很“单纯”,它只能装载 数据,作为数据存储的载体,而不具有业务逻辑处理的能力。

                            //用来表示普通的Java对象.

                                          

                                

 

                        什么是分层开发: 根据功能把代码分成相对独立的各个功能模块,各模块只负责自己的事                                                      情。

                         分层开发的优点:1.开发人员只用专注于自己的负责的功能,提高了开发人员的专注度。

                                                     2.便于分工协作:各个开发人员可以单独完成各自的功能,只需知道相                                                        应的接口。

                                                     3.便于代码复用,只要实现了接口就可以使用,不同的类就可以组成一个新的程序。

                                                     4.便与程序扩展  ,只要实现了接口添加新的类就可以实现新的功能.

                         如何使用分层开发:

                         例:

                            java中如何分层

                            菜鸟日记之分层

                                          

                                 新建一个包》在包下新建一个类(不然无法创建子包,我不会不知道行不行)》创建各层的包。

                                 菜鸟日记之分层

                   在包下创建接口规定要操作的方法》在创建一个功能层下的子包(impl)用于实现接口》在实现包里创建实现类。

                

 

                   然后就可以在每层中写相应的代码了。

                   model层(实体层):用于创建实体类 各层之间用实体类对象传递数据;

                   data层(数据访问层):实现关于数据库的操作

                   biz层(业务逻辑层):隔离据访问层和显示层,‘’可在该层完成业务判断‘’(自己猜的)

                   ui层(显示层):显示给客户的数据的各种操作(main)

                   util(工具包)各种便于编写代码的工具类

                       例:下面的代码只是实现了功能,有好些很不好的地方,写的时候想先成功了再一次过一遍,所以没改,我存学校了U盘里没有看的大神们将就下吧

                          

    model层

package nine.model;

public class ShopRecordModel {
    //记录id
    private int id;
    //身份证
    private String identity;
    //购车日期
    private String shopTime;
    //车辆识别码
    private String carID;
    //车型
    private String type;
    //官方价格
    private double  authorityPrice;
    //发票价格
    private double ticketPrice;
    //购车税
    private double carTax;
    
    //无参构造函数
    public ShopRecordModel() {
        
    }
    //带参构造
    public ShopRecordModel( String identity,  String carID,
 double authorityPrice, double ticketPrice,double paiLiang) {
        this.id = id;
        this.identity = identity;
        this.shopTime = shopTime;
        this.carID = carID;
        this.type = type;
        this.authorityPrice = authorityPrice;
        this.ticketPrice = ticketPrice;
        if (paiLiang>1.6) {
            this.carTax = (ticketPrice/1.17)*0.1;
        }else {
            this.carTax = (ticketPrice/1.17)*0.075;
        }
    
    }
     //读写
    public int getId() {
        return this.id;
    } 
    public void setId(int id) {
        this.id = id;
    }
    public String getIdentity() {
        return identity;
    }
    public void setIdentity(String identity) {
        this.identity = identity;
    }
    public String getShopTime() {
        return shopTime;
    }
    public void setShopTime(String shopTime) {
        this.shopTime = shopTime;
    }
    public String getCarID() {
        return carID;
    }
    public void setCarID(String carID) {
        this.carID = carID;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public double getAuthorityPrice() {
        return authorityPrice;
    }
    public void setAuthorityPrice(double authorityPrice) {
        this.authorityPrice = authorityPrice;
    }
    public double getTicketPrice() {
        return ticketPrice;
    }
    public void setTicketPrice(double ticketPrice) {
        this.ticketPrice = ticketPrice;
    }
    public double getCarTax() {
        return carTax;
    }
    public void setCarTax(double carTax) {
        this.carTax = carTax;
    }
    
}

 

 

    数据访问层接口

  

package nine.data;

import nine.model.ShopRecordModel;

public interface ShopRecord {
     boolean add(ShopRecordModel sr) throws Exception;
}

 

 

数据访问层实现类

 

package nine.data.impl;

import nine.BaseDao;
import nine.data.ShopRecord;
import nine.model.ShopRecordModel;

public class ShopRecordDataImpl extends BaseDao implements ShopRecord {

    @Override
    public boolean add(ShopRecordModel sr) {
        
           BaseDao bd=new BaseDao();
         
           return   bd.executeUpdate("insert into ShopRecord values(?,?,?,?,?,?,?)",sr.getIdentity(),sr.getShopTime(),sr.getCarID(),sr.getType(),sr.getAuthorityPrice(),sr.getTicketPrice(),sr.getCarTax());
          
    }

}

 

   业务逻辑层接口

package nine.biz;

import java.sql.SQLException;

import nine.model.ShopRecordModel;

public interface ShopRecordBiz {
     String add(ShopRecordModel sr) throws SQLException;
}

   业务逻辑层实现类

 

    ShopRecordDataImpl srdi=new ShopRecordDataImpl();
     
    @Override
    public String add(ShopRecordModel sr) throws SQLException {
        if (srdi.add(sr)) {
            return "数据保存成功,车辆购置税为:"+sr.getCarTax();
        }else {
            
        }
        
        return "购买失败!";
    }

    显示层

 

    Scanner input=new Scanner(System.in);
        ShopRecordBizImpl srbi=new ShopRecordBizImpl();
        System.out.println("记录车辆购置税,请按提示录入相关信息:.");
        System.out.print("请输入车主身份证(18位):");
        String identity=input.next();
        System.out.println();
        System.out.print("请输入车辆別识码(17位):");
        String carId=input.next();
        System.out.println();
        
        System.out.print("请输入车辆排量:");
        double pai=input.nextDouble();
        System.out.println();
        System.out.print("请输入官方指导价:");
        double oldPrice=input.nextDouble();
        System.out.println();
        System.out.print("请输入发票价格:");
        double price=input.nextDouble();
        System.out.println();
        ShopRecordModel srdm=new ShopRecordModel(identity,carId,oldPrice,price,pai);
        srdm.setShopTime("2015-5-10 ");
        srdm.setType("什么");
        try {
            System.out.println(srbi.add(srdm));
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }