开放封闭原则之“面向接口编程”

2024-08-27 22:18

本文主要是介绍开放封闭原则之“面向接口编程”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  

开放封闭原则之“面向接口编程”


  前言:

     同样是开放封闭原则,在ITOOjava的项目中,对“面向接口编程”又有了更深刻的理解,下面请听小编徐徐道来:


      开放封闭原则定义:用面向接口编程这就为我们以后程序的扩展性提供基础。“对修改封闭,对扩展开发”。

  利用接口的一个基本用途,规定子类的行为。更为广阔的用途是接口为其他人使用者提供什么用途。模块和模块之

间的解耦就看你的接口设计的是不是合理,是不是好用。这才是从框架设计师角度去思考问题了。 


什么是接口?

      接口就是标准,是用来隔离具体实现的(或者说是和具体实现解耦)。举个生活中的例子就是:各种手机、移动硬

盘等连接上上的USB接口就是标准,大家各自制造自己的具体产品。产品使用者和提供者都遵守这个标准,那么使用

者就不必担心自己电脑上的USB接口是否只能插移动硬盘而不能插手机。



为什么要用接口 ?

   主要是是用于处理多变的情况。

  (1)接口在实际开发过程中最大好处是,你可以按照设计,先把接口写好,然后分配大伙干活的时候,告诉a们去用写好的接口去实现他们的具体功能,而告诉b们,去写那些已经写好但是没有具体的代码的接口,这样可以提高工作效率。并且底层和应用也通过接口做了一个很明显的分层。
 
   (2)接口可以降低耦合性,换句话说,可以让某个模块或功能能够重复利用,这样只要写这功能一次代码就ok了。其他地方要用到的,全部用接口调用来实现


   (3)合理使用接口、继承,拥有良好架构的程序,二次开发上可能会节省很多时间,因为它低耦合 扩展性高。



ITOOJava5.0 代码

       走查之面向接口编程:原来的Service界面:

   
/*** 修改人:通过课程Id、考试Id、试卷Id和数据库表名来计算分数+Daniel+2016-6-14* @param couserId   课程Id* @param examId     考试Id* @param paperId    试卷Id* @param dataBaseName  数据库*/@Overridepublic boolean countScoreByPaperId(String couserId, String examId, String paperId,String dataBaseName) {// 第一步将所有的记录查出来!!boolean flag = false;Map<Serializable, Serializable> map = new HashMap<Serializable, Serializable>();map.put("couserId", couserId);map.put("paperId", paperId);String hqlstrString = "select t.studentID,t.studentName, SUM(t.score) as markScore From PaperRecord t where t.courseID=:couserId and t.paperId=:paperId GROUP BY t.studentID";List<PaperRecord> list = new ArrayList<PaperRecord>();try {// 查询到学生,和成绩信息。list = calculateScoreEao.queryByHql(hqlstrString, map, dataBaseName);List<StudentScore> liststudent = new ArrayList<StudentScore>();for (int i = 0; i < list.size(); i++) {Object ojb = (Object) list.get(i);  



把SQL语句写在CalculateScoreEao.java 中,创建一个接口:
 
   
/*** 修改人:通过课程Id、考试Id、试卷Id和数据库表名来计算分数+Daniel+2016-6-14* @param couserId   课程Id* @param examId     考试Id* @param paperId    试卷Id* @param dataBaseName  数据库表名*/public List<PaperRecord> queryStuAndMarkScoreByKeyword(String couserId, String paperId,String dataBaseName);

 
在CalculateScoreEaoImpl.java 中实现这个接口:
 
/*** 修改人:通过课程Id、考试Id、试卷Id和数据库表名来计算分数+Daniel+2016-6-14* @param couserId   课程Id* @param examId     考试Id* @param paperId    试卷Id* @param dataBaseName  数据库表名*/public List<PaperRecord> queryStuAndMarkScoreByKeyword(String couserId, String paperId,String dataBaseName){Map<Serializable, Serializable> map = new HashMap<Serializable, Serializable>();map.put("couserId", couserId);map.put("paperId", paperId);String hqlstrString = "select t.studentID,t.studentName, SUM(t.score) as markScore From PaperRecord t where t.courseID=:couserId and t.paperId=:paperId GROUP BY t.studentID";return this.CalculateScoreEao.queryStuAndMarkScoreByKeyword(String couserId, String paperId, String dataBaseName);
}



之后:CalculateScoreServiceImpl.java中代码如下:



  

优化后:       

/*** 修改人:通过课程Id、考试Id、试卷Id和数据库表名来计算分数+Daniel+2016-6-14* @param couserId* @param examId* @param paperId* @param dataBaseName*/@Overridepublic boolean countScoreByPaperId(String couserId, String examId, String paperId,String dataBaseName) {// 第一步将所有的记录查出来!!boolean flag = false;List<PaperRecord> list = new ArrayList<PaperRecord>();try {// 查询到学生,和成绩信息。list = calculateScoreEao.queryStuAndMarkScoreByKeyword(String couserId, String paperId,String dataBaseName);List<StudentScore> liststudent = new ArrayList<StudentScore>();for (int i = 0; i < list.size(); i++) {Object ojb = (Object) list.get(i);Object[] objs = (Object[]) ojb;


小结:

          特别是在ITOO这种大型的平台,利用面向接口的编程思想就更能体现出扩展性和维

护性了,ITOOJava平台现在还没有上线,即使是上线之后,也是需要不断的扩展和维护

了,将集成改成接口之后,就真正的做到了开放封闭的原则,方便以后的扩展和维护,

实际操作中也方便分模块的分工协作,就一个大项目肯定是要很多人一同去协作来做

的,这正明显的提高了运行效率、开发和维护的效率。







这篇关于开放封闭原则之“面向接口编程”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112935

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

Python异常处理之避免try-except滥用的3个核心原则

《Python异常处理之避免try-except滥用的3个核心原则》在Python开发中,异常处理是保证程序健壮性的关键机制,本文结合真实案例与Python核心机制,提炼出避免异常滥用的三大原则,有需... 目录一、精准打击:只捕获可预见的异常类型1.1 通用异常捕获的陷阱1.2 精准捕获的实践方案1.3

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应