可扩展性的动力——不断变化的用户需求
世界上不变的是变化,软件需求不会变化?不可能!一个系统是否拥抱变化是由它的可维护性和可扩展性决定的,软件环境的变化(可能是业务环境,运行环境)导致软件要进行改动才能满足人们对它的要求,这种系统本身适应变化的能力就是可扩展性。
可扩展性的设计忠告
可扩展性对系统的性能和复杂度都有影响,复杂度很高的项目很难维护,亦很难测试,我比较推崇可预见的、简单的扩展设计,愈简单愈好,避免前期大量的设计,对后期的无法预见的扩展,我们可以通过持续的重构来达到目标。所以,可扩展性不是一蹴而就的,是需要随着你对业务领域理解的深入而不断重构获得,一般三次可以达到比较理想的程度。
对于可扩展性的预见就像买股票一样,如果你买中了,你将会受益颇多,如果你没有买中,那么你的代码质量将面临臃肿和沉沦。这对你今后的维护和开发都造成不小的麻烦。
如何构建灵活的系统?
白箱可扩展性
开放箱式可扩展性
含义:原始源代码可以查看和修改。
手段:
- 直接修改代码,没有足够的注释,需要阅读一大片相关联的代码,才能理解其中的含义;代码风格混乱,完全不按标准出牌;码跟其他模块有牵连,需要其他模块修改,自己的工作才能进行。
- 直接修改代码,有足够的注释,良好的代码风格,容易阅读和理解,而且修改之处值局限在一个类或者一个模块中。
玻璃箱可扩展性
含义:可以查看源代码,但不能修改。
手段:
-
引入源代码工程和jar包,组合封装使用第三方的类库
-
引入源代码工程和jar包,利用继承,编写子类,在子类中添加新的业务逻辑
黑箱可扩展性
含义:扩展现有系统而不直接扩展其原始代码,源代码通常不可见,提供文档和约定。到了黑箱这一步,才算真正满足OCP原则。
手段:
- 修改配置文件,需重新读取配置文件使其生效。通常来说,这些配置文件保存着技术参数或者业务逻辑等等。
- 通过配置向导,比如使用什么数据库,使用什么语言环境,一般是在程序安装时候或者初始化配置时候将用户的选择保存在硬盘上,程序启动时会自动读取这些文件。
-
对象动态装配,使用java反射技术,在运行时期装载类(class.forName),比较有名的是spring中的依赖注入,它其实也要配置bean文件。
- 基于模块的运行时动态扩展,前面所说的都只是在比较细粒度上的技术扩展方式,而且都需要重新编译项目,才可能使新功能生效,都没有达到模块级别的扩展。OSGi可以实现模块级别的动态扩展,而且是运行时的。所谓运行时模块的动态扩展,就是说你可以将新开发的类和文件按照Bundle进行组织,然后直接扔到运行时环境下,这些功能就可以用了。Eclipse的插件体系结构就是以equinox(一个OSGi规范的实现)为核心构建的。
-
基于平台,让开发人员自行扩展,平台和框架通常定义了一些Hotspot(热点),在这些点上,可以进行扩展,比如window提供数千个API供应用程序调用,还有firefox、chrome的插件,以及各种应用平台(facebook、taobao),它们大多数都是通过中间语言进行扩展,具体的技术细节还不太清楚。
分享到:
相关推荐
软件质量不仅包括功能性质量,例如正确性、健壮性和可靠性,也包含非功能性质量,如性能、易用性、清晰性、安全性、可扩展性、兼容性和可移植性。这些质量属性共同决定了软件的整体价值。 可扩展性的重要性在于,...
在软件质量的构成中,非功能性质量属性如性能、易用性、清晰性、安全性、兼容性、可移植性和可扩展性往往被设计师所重视。可扩展性与这些属性相辅相成,为软件的持续发展提供了基础。特别是当业务需求发生变化时,...
针对Java代码质量度量进行研究,使用Ant工具整合各种开源的静态测试工具,并制定基于静态分析的Java代码质量综合评价方案,可支持包括代码规模、规范性、可维护性、可扩展性和潜在危险等方面的综合检测,为项目的...
总结来说,"Delphi抽象提高可扩展性例子及文章"是一个深入探讨面向抽象编程的资源,对于任何希望提高其Delphi项目质量和可维护性的开发者来说,都是不容错过的学习材料。通过实践和理解这些抽象技术,开发者能够构建...
### 软件工程中的可扩展性与维护性设计 #### 第1章 简介 **维护性定义** - **可维护性**是指软件在维护过程中能够被修改的容易程度,包括修复缺陷、改进性能或增加新功能等方面。 - **可维护性的目标**是使软件...
高质量的代码能够提高软件的可维护性、可读性和可扩展性,减少 bug 和错误的出现。本文总结了提高C++/C代码质量的经验,旨在帮助软件开发者编写高质量的代码。 1. 文件结构 文件结构是编写高质量代码的基础。一个...
### 软件工程中的可维护性与可扩展性设计 #### 第1章 简介 **软件工程概述** 软件工程是一门工程学科,它通过系统化、规范化和量化的方法来开发和维护软件。软件工程的目标是提高软件产品的质量,确保其能够满足...
### 软件工程与可维护性与可扩展性设计 #### 第1章 软件工程概述 **软件工程定义** 软件工程是一门综合性的学科,它将计算机科学、数学和其他相关领域的理论与方法应用于软件产品的开发、运行、维护等整个生命...
正确使用设计模式可以提高代码的可扩展性和可维护性。 9. **模块化与分层架构**:将代码划分为模块或层次,有助于降低耦合度,增强系统的灵活性和可重用性。MVC(模型-视图-控制器)、MVVM(模型-视图-ViewModel)...
它结合了静态代码分析和代码审查的特性,为开发团队提供了一种全面的方式来提升代码质量和安全性。SonarQube的核心目标是帮助开发者发现并修复代码中的bug、漏洞和异味,从而确保软件项目的健康和可维护性。 ...
Visual Studio 2008可扩展性开发是一个深入探讨如何利用该版本的IDE来创建自定义插件和扩展的主题。Visual Studio作为微软的核心开发工具,以其强大的功能和广泛的编程语言支持,深受开发者喜爱。了解其历史有助于...
在IT行业中,尤其是在软件开发领域,代码质量是衡量一个项目成功与否的关键因素之一。IBM作为全球领先的科技企业,其在Java代码质量方面的专题探讨,无疑为业界提供了宝贵的指导与实践案例。以下是从“IBM Java代码...
本文将深入探讨提高代码质量的三大要素:可读性、可维护性和可变更性。 **可读性**是代码质量的基石。代码应清晰易懂,让其他开发者能迅速理解其功能和逻辑。这包括但不限于: 1. **避免大段代码**:过长的函数或...
### 软件工程与软件可扩展性评估 #### 第一章:软件工程概述 **软件工程定义**:软件工程是一门学科,旨在系统化、规范化、可度量化的方式进行软件开发、运行和维护,目的是提高软件的质量、开发效率并降低成本。 ...
为了提升软件质量,我们需要关注十个关键指标:正确性、健壮性、可靠性、性能、易用性、清晰性、安全性、可扩展性、兼容性和可移植性。 首先,正确性是程序的基础,它要求程序能够按照预期执行,无错误或bug。...
- **云原生版本控制**:利用云平台提供的弹性基础设施和分布式服务,提供可扩展性和高可用性。集成云原生工具如Kubernetes和Serverless,优化代码库运维流程,并通过按需付费模式降低成本。 - **GitOps和版本控制...
Visual Studio是一款强大的集成开发环境(IDE),其可扩展性是其独特优势之一,允许开发者根据需求定制和扩展功能。在本文中,我们将深入探讨Visual Studio的可扩展性,包括创建和部署自定义SDK,以及利用Roslyn...
良好的代码质量确保了系统的可扩展性、可维护性和可靠性。本文探讨了如何通过代码度量来评估和改进代码质量,特别是关注耦合度量——传入耦合和传出耦合,这两种度量对于分析软件架构的稳定性至关重要。 传入耦合...