`
ruilin215
  • 浏览: 1142955 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

面向各维度的软件复用

阅读更多
复用!使我们软件工作者梦寐以求的目标。所谓复用,就是在不改变原有代码的情况下,重复使用原有代码。面向对象(OO)技术的三个基本特点都是为了复用。
  1. 封装。这个本就是为了复用。是对复杂数据结构的复用。事实上,封装并不是只有在OO在才出现的。
  2. 继承。是对基类代码的复用。派生类在不改变基类的情况下,复用了基类的代码。
  3. 多态。是对调用基类的代码的复用。调用者可以在不改变代码的情况下,使用到派生类的新特性。

不过今天我们不是只谈这方面的复用。

软件按照各种变更需求,我们可以看出几个维度对软件的复用需求。

  1. 软件需求变更。软件在需求变更的情况下,原有业务模块会发生变更。在这种情况下,属于要求对原有系统的复用。这是我们最经常说的。
  2. 软件版本升级。软件经过一段时间后,原有系统会进行升级处理。在这种情况下,属于要求对就版本系统的复用。这种复用经常被人忽略。或者说其复用难度很高,很少有人能做到。
  3. 软件系统整合。一个非常重要的需求,就是在系统整合过程中,需要复用企业中已经存在的软件。虽然说,原有软件开发商并不一定要考虑这个问题。不过,复用可以带来明显的经济价值,其成本低的诱惑力,致使企业必然走这条道路。

基于这三个维度,我们都提出了对软件复用的要求。这也是软件发展的三个维度。如下图:

你可能已经注意到了,大家经常提到的面向对象技术没有被我显式列入图中。不过这些技术都是可以以OO为基础的。特别式组件技术。

在需求变更发生的时候,对已有二进制模块的复用是最有效的复用。因此我这里推荐使用插件技术。插件技术有微内核和巨内核两种扩展方式。个人推荐第二种。使用中具体情况具体分析。使用插件技术,可以直接在原有系统的扩展点上,通过增加的插件来实现业务的变化。这样,原有其他系统都不需要经过大量测试。且效率也是非常高的。

这里提到的测试成本是非常重要的概念。从物理模块上讲,任何已变化的模块,都是不可信任--即必须经过测试的。如果能完全复用,那么这些没有变化的部分的功能的测试工作,将变得非常简化。

软件版本之间的复用,一般都是指高版本复用低版本的模块。细化一下,可以分为业务实体复用,界面功能元素复用,业务模块复用。这个概念的复用,由于介入了业务,所以导致其方法和经验不能在全世界范围公用。这也是程序员最头疼的地方。不过,都不好做也是好事,这样大家都不提这件事了。至少在设计新系统的时候,很少考虑复用旧系统的模块,或者如何让将来的系统复用现在的新模块。没有人会责怪你没有考虑这点。

好在,这个问题越来越被重视。这里面一个是早就提出的组件技术,一个是平台技术。其实这两者在这里是一样的。平台技术也正是基于业务的组件。将两者合在一起,就是业务组件技术。POJO技术(pure old java object or plain ordinary java object)就是针对此类复用而提出的一种纯业务概念,这也是让业务实体能够在后续版本直接复用的概念。让业务对象,不需要考虑系统环境,而只关系业务本身的实现。因为在后续版本中,基本业务的差别是不大的。所以其复用的可能性会非常大。业务组件的编写,对设计者的要求非常高,需要在设计的时候将组件和环境的关系隔离开,以方便后续版本的复用。

组件概念提出很长时间了,但是都没有很好的实现,与其对设计的要求很高很相关。关键还在于我们在对业务理解的精深以及设计中对组件概念的把握。

系统整合中的最大问题,在于已存系统很可能并没有考虑与其他系统的接口。这种情况下,二进制的复用难道就会变得很高。在这种方式的应用中,最基本的就是消息技术。将对已存系统的调用,封装成各种消息,发送给已存系统。这些消息可以简单的是Windows消息,也可以是WebService消息。有些公司已经钻研透Java的实现底层,可以直接将消息发送给Java虚拟机。请注意这里的消息的概念很泛化,泛指命令的组成形式。

总之,各种维度方向的复用,最基本的要求就是设计上的考虑。与其后续的考虑,不如新做的时候就在设计上进行考虑。复用,要把它作为心中紧绷的弦,才可能真正做出能复用且可被复用的软件出来。

分享到:
评论

相关推荐

    java源码资源手机游戏J2ME毕业设计

    java源码资源手机游戏J2ME毕业设计提取方式是百度网盘分享地址

    第5章 存储器管理(笔记整理)

    内容概要:本章节深入探讨了存储器管理和相关概念。首先介绍了存储器的多层次结构,涵盖了寄存器、主存和辅助存储的区别及其功能。接下来讨论了主存储器、寄存器的功能和角色,包括二者如何支持程序运行及数据处理。之后分析了高速缓存和磁盘缓存的运作机制及其优化计算机性能的方式。接着概述了程序的装入、链接、地址绑定、内存保护的技术细节。此外,文章还讲述了存储器管理的高级技巧如对换技术、覆盖技术和不同的分配方式,以及各种存储管理模式的具体实施方式,比如连续分配、分页、分段及段页组合。 适用人群:对操作系统内部工作原理有一定兴趣的计算机专业学生、技术人员及爱好者。 使用场景及目标:适用于课程学习和项目实践中,帮助理解和设计复杂的存储管理系统。通过本文的学习可以达到对操作系统底层存储管理的理解,掌握不同存储分配策略的选择标准和技术应用。 阅读建议:建议逐步阅读每个小节,重点关注各部分内容的实际应用场景及其背后的设计理念。同时,尝试绘制存储层次模型和不同管理策略的工作流程图,加深理解。

    gradle611all.zip.png

    gradle611all.zip.png

    onnxruntime-1.16.0-cp39-cp39-win_amd64.whl

    onnxruntime-1.16.0-cp39-cp39-win_amd64.whl

    C#ASP.NET大型商城系统源码带数据库文档数据库 SQL2008源码类型 WebForm

    ASP.NET大型商城系统源码带数据库文档 1.开发环境:vs2010 + slq2005/2008 2.首先在SQL2005建立一个空白数据库。 3.有VS2010 打开项目,直接调试,根据出现提示建立数据库。 4.第3点出现的页面的管理员用户和密码就是后期软件的登陆帐户和密码。 5.本系统有两套模版,在店铺管理 - 页面设置 这里做修改 6.如果觉得自己的系统是空数据库,想弄成和演示的一样,那就将doc/database下面的数据库直接还原就可以了。 7.还原后的数据库登陆帐户和密码分别是:admin888 admin888

    C#ASP.NET酒店管理系统源码(WPF)数据库 Access源码类型 WinForm

    ASP.NET酒店管理系统源码(WPF) 一、源码特点 采用WPF进行开发的酒店管理系统源码,界面相当美观,功能齐全 二、菜单功能 1、预订登记:可选择入住时间、离店时间、所在城市、证件类型,保存、删除、查询、返回 2、住宿结算:新增入住、保存、删除、查询、返回 3、今日盘点:查询、返回 4、查询统计: 5、房间管理:增加房间类型、删除类型、增加房间、删除房间、保存、返回 6、用户管理:增加用户、删除用户、保存、返回 7、系统配置:基本功能 8、显示当前系统时间等功能的实现

    资源quazip.dll

    资源quazip.dll

    C#汽车货运管理系统源码 货运公司车辆管理系统源码数据库 SQL2008源码类型 WinForm

    汽车货运管理系统源码 货运公司车辆管理系统源码 货运公司管理系统采用winform C# 技术开发,数据库Sqlserver2008R2,同时兼容Mysql。 更新日志: 1.修改新增数据异常。 2.增加安装部署工程。 包括如下功能模块: 一、输入功能: 该系统提供了对基本信息录入、车辆登记录入、车辆各项费用录入、驾驶员登记录入、车辆出回车录入、主卡分卡充值录入、加油登记录入,配件信息录入等的模式录入和表格界面录入。在出现从表信息录入时会出现表格界面的录入方式其录入方式同模式录入方式一样。录入信息时可能会出现相同的信息,为避免重复录入部分字段设置了辅助录入功能,您只需输入几项即可完成录入功能。操作方便快捷,可大大提高您的工作效率。 二、查询功能: 您只需用鼠标点击一下相应节点,就可迅速查询统计销售的情况,根据不同的查询统计条件显示出需要的结果。 三、报表功能: 根据查询或者统计出来的结果生成报表。 四:打印功能: 系统支持打印功能,如想打印信息单击预览报表上的打印按钮即可。 五、安全功能: 进入系统后,单击菜单“系统→工具→用户及权限”可以设置系统的各用

    基于springboot+vue的大学生创业项目的信息管理系统源码数据库文档.zip

    基于springboot+vue的大学生创业项目的信息管理系统源码数据库文档.zip

    numpy-1.25.2-cp311-cp311-linux_armv7l.whl

    numpy-1.25.2-cp311-cp311-linux_armv7l.whl

    STM32神舟III号例程源码SD读卡器(神舟III号-库函数版)

    STM32神舟III号例程源码SD读卡器(神舟III号-库函数版)提取方式是百度网盘分享地址

    numpy-1.20.0-cp37-cp37m-linux_armv7l.whl

    numpy-1.20.0-cp37-cp37m-linux_armv7l.whl

    matplotlib-3.7.5-cp39-cp39-linux_armv7l.whl

    matplotlib-3.7.5-cp39-cp39-linux_armv7l.whl

    onnxruntime-1.16.3-cp38-cp38-win_amd64.whl

    onnxruntime-1.16.3-cp38-cp38-win_amd64.whl

    【node毕业设计】nodejs学院会议纪要管理系统源码(完整前后端+mysql+说明文档).zip

    环境说明: 开发语言:nodejs 框架:Express 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:VS code/HBuilder X

    【小程序毕业设计】自助购药小程序源码(完整前后端+mysql+说明文档+LW).zip

    功能说明: 系统主要包括首页、个人中心、用户管理、商家管理、药品信息管理、药品分类管理、发票信息管理、系统管理等功能模块。 环境说明: 开发语言:Java 服务器:tomcat7及以上 JDK版本:JDK1.8 数据库:mysql 5.7数据库工具:Navicat11及以上 开发软件:eclipse/idea 小程序框架:uniapp/原生小程序 开发工具:HBuilder X/微信开发者

    基于Servlet和JSP实现的登录Demo

    《基于Servlet和JSP实现的登录Demo》项目是一个简单的 Java Web 应用示例,展示了如何使用 Servlet 和 JSP 搭建基础的用户登录功能。项目通过 Java Servlet 处理用户请求,使用 JSP 构建前端页面,并结合 MySQL 数据库验证用户身份。用户可以通过登录页面提交账号和密码,后端接口会对用户输入进行校验,并返回登录结果。本项目适合 Java Web 初学者,旨在帮助学习 Servlet 和 JSP 的基础用法,掌握表单提交、请求转发、数据库连接等关键技术点。项目环境包括 IntelliJ IDEA、Apache Tomcat 和 MySQL,支持 JDK 8 及以上版本。

    (全新整理)中国高校各专业录取分数线、招生计划、分段表数据(2008-2023年)

    1、资源内容地址:https://blog.csdn.net/2301_79696294/article/details/143733939 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理

    pillow-10.3.0-cp39-cp39-linux_armv7l.whl

    pillow-10.3.0-cp39-cp39-linux_armv7l.whl

    opencv_contrib_python-4.5.1.48-cp39-cp39-linux_armv7l.whl

    opencv_contrib_python-4.5.1.48-cp39-cp39-linux_armv7l.whl

Global site tag (gtag.js) - Google Analytics