业务层的作用
业务层不只是单纯的调用持久层,不能只是要什么数据就从数据库取,取出来就返回给表现层去展示。如果总这样的话,数据库中表描述的字段不够,表现层要展示的内容多余数据库表的内容,就会很苦恼,想着去修改数据库表。
例如,取出来一个食物,里面有保质期,如果表现层要展示这个食物有没有过期,那数据库表就要有这个有没有过期的标签,没有的话就无法展示。
其实,数据库表不用增加这个字段,这时候,需要一个食品类的扩展类,这个扩展类继承于食品类,食品类的属性严格与数据库表中字段对应。但是扩展类就可以去定义这个是否过期的属性,达到扩展的目的。然后在业务层实现类中,取到了食品类对象,通过判断有无过期,再将有无过期的标签和取出的食品类本身都封装到食品类扩展类中去,再给表现层返回这个扩展类对象。
这样一来,即不用增加数据库字段,又能充分利用扩展类和业务层。
即业务层方法返回扩展类,持久层方法返回本身类。业务层接口和持久层接口的同一个方法的参数是不一样的。
Service:
public FoodCustom getFood(int id) ;
ServiceImpl:
public FoodCustom getFood(int id){
Food food = foodMapper.selectByPrimaryKey(id) ;//调用mapper代理对象,根据id取出food表中记录
String flag ;//是否过期的标识
//判断食物有无过期的代码….
FoodCustom foodCustom = new FoodCustom() ;
//拷贝原本的food类对象的属性值到扩展类foodCustom
BeanUtils.copyProperties(foodCustom,food) ;
foodCustom.setFlag(flag) ;//扩展类存入foodCustom扩展类对象
return foodCustom ;
}