关于软件代码复用形态和遇见问题的解决方案

软件中,代码复用,就是站在巨人的肩膀上做一件事,事半功倍,没有什么需要从0开始做起。

从软件组成上分,软件的复用可以包含几个层面:
1、工具
这个代码一般是放在任何java项目中都可用,典型的是算法,如MD5、RSA等、解决特定技术问题的技术框架,如Spring、Hibernate,其他的如apache 的common库等

2、组件
组件的理解是,在特定的技术框架中,按照框架中定义的技术规范,开发的较通用的解决方案组件。
如在J2EE中的Filter、Spring中的AOP的日志处理组件。
这类组件,依赖框架的环境才能运行,是对框架的补充、定制和扩展。
如果一个公司开发了自己的框架,定制组件的多少,则很能反应公司的技术积累程度。

3、模块
或者服务,具体业务的解决方案的复用。
相对而言,模块与前面两不同的地方在于,前面两个还都是纯粹技术性的,不具备业务处理能力,模块则是纯粹的某一种业务解决方案,如安全、计费等。
一个公司对模块的累计程度,反应公司的业务积累程度,在业务开发过程中,少走弯路。

模块复用过程的问题:
 > 复用模块的业务并不能完整满足现有需求
 > 多年前的过时的技术,如现在还在使用Hibernate1
 > 如何在现有项目中集成?
第一个问题,模块必须具备二次开发能力,不表,所有的二次开发通用的问题
第二个问题,每个项目都会追逐最新技术带来的红利,但是对于存量项目,没人愿意因为第三方升级了而同步升级,毕竟兼容是理论上的。要解决这个问题,必须让代码能在独立环境中运行起来,沙箱就是这个。在Java中独立的模块在独立的ClassLoader不失为一个不错的解决方案。
第三个问题,集成主要考虑几个问题:①如何互不干扰?参考问题2。②如何部署?部署的结果会影响监控等。③如何互访?复用最终的目的是向新项目提供服务
这里有必要说说微服务,使用微服务显然上面集成的问题都不存在,微服务在项目的集成、访问和服务维护等方面有优势。然而在一个以项目为主的公司中,微服务却存在天然的缺陷:①项目是定制的,共享的微服务我能修改吗?②项目的部署,允许我们使用现有的微服务吗?③微服务要满足各种定制需求的项目,这个微服务还是微服务吗?
再说一下独立项目复用的情况,这意味着,在部署时复用项目和新开发项目在不同JVM中运行着,双方之间交互的复杂度增大很多,包括开发、运维等。
理想的情况是,模块承载业务,作为共享单元,应用通过模块组装,模块之间通过底层框架定义的协议完成接口调用和数据交换。

原文地址:https://www.cnblogs.com/hifong/p/6344519.html