本篇博客是对项目开发中出现的没有复用思想的反例进行的总结并进行的改进。目的是将经历转变为自己的经验。通过博客的方式分享给大家,大家一起共同进步和提高。
反例一解读:
这两个归根到底都是查询在线人员,并且返回的数据类型和结构都是一致的。我们完全有条件可以只写一个接口来实现这两个类似的功能。
反例二解读:
这里使用了mybatis动态SQL进行处理,但是对于course_id与class_id完全可以抽出来,作为公共的进行使用。
模拟代码的环境为:spring boot、 spring mvc 、mybatis、mysql
对于反例一的优化思路:两个查询在线人员的的接口我们可以使用一个接口进行实现,两个接口的区别主要是在于入参不一致,这里我们可以通过使用mybatis的动态SQL进行实现。这样我们由之前的两个接口的(两个controller、两个IService、两个ServiceImpl、两个mapper、两个sql)转变成了一个(controller、Iservice、ServiceImpl、mapper、sql)。
Controller层
/** @description:查询课程内容* @author: wangwei* @date: 2023/3/7 16:00* @param: [courseContent]* @return: java.util.List**/@PostMapping("/queryCourseContent")public List queryCourseContent(@RequestBody CourseContentEntity courseContent){return iCourseContentService.queryCourseContent(courseContent);}
IService层
List queryCourseContent(CourseContentEntity courseContent);
ServiceImpl层
@ResourceCourseContentMapper courseContentMapper;/** @description:查询课程内容* @author: wangwei* @date: 2023/3/7 15:57* @param: [courseContent]* @return: java.util.List**/@Overridepublic List queryCourseContent(CourseContentEntity courseContent) {return courseContentMapper.queryCourseContentRecord(courseContent);}
mapper层
//通用查询语句List queryCourseContentRecord(CourseContentEntity courseContentEntity);
mapper.xml
1.先查询所有的课程内容,不传入任何的参数
2.查询创建人为张有博的课程内容,传入参数createBy=“张有博”
优化之前:
优化之后:
反例二的优化思路:将的course_id与class_id抽出作为公共数据使用。这样代码体现出代码的复用思想,以及维护量也小的多。
优化之前的缺点:代码冗余没有复用思想,比较不好维护。
优化之后的优点:将公共代码进行了复用,体现了复用思想,提高对于代码复用,代码维护。
1.在设计之初应该想到如何设计接口如何设计,如何提高效率,如何到达复用强,维护成本低,扩展性强。是面向对象的设计还是面向过程的设计,最后选择一种复合当前项目的设计思想,并按照这个设计思想进行设计和开发。