菜鸟日记之分层
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(); }