您的位置:首页 > 其它

扩展的思维

2016-11-14 16:48 405 查看
扩展的思维,即要求开发者能够充分考虑需求的变更,并采取相应的措施来处理变更,最终实现“开闭原则”所倡导的那样,“对修改封闭,对扩展开放”。

1、面向接口编程,让扩展更容易。

对软件中易变的细节进行抽象,抽象成接口(接口包括接口、抽象类),通过实现抽象的接口来进行扩展,当软件的需求发生变化时,只需要实现相应的接口,定义新的类来扩展软件,而软件的基本框架可以保持不变,因为软件框架是由抽象的接口来定义的。所以面向接口编程,会使软件的扩展变得更容易。

2、善用设计模式进行扩展

开发扩展性好的程序,设计模式是最有力的思维工具。设计模式的核心,就是封装变化。使用设计模式时,同样需要以变更为思维的切入点。若算法经常变更,可以选择策略模式;如果需要不断扩展新的状态,使用状态模式。

3、善用配置来进行扩展

代码中经常需要使用弹出框,但是系统中的弹出框往往具有这样的特点:整体风格类似,局部细节有差异。很多程序员碰到这种场景,习惯于先实现一个母版,再“ctrl+v”一个子版本稍作修改来使用。这种实现不仅会产生大量的重复工作,还存在维护时需要多处修改的问题。对于这种场景,可以在母版弹框的基础上,引入配置系统,通过配置达到不同式样需求的变更扩展。使用配置系统来进行扩展的例子很多,开发中引入IOC容器来管理系统使用的程序集便是一个很好的例子,IOC容器根据配置加载不同的程序集,从而让系统完成不同的功能,这也是一种不错的扩展实现。

4、使用面向插件开发来扩展系统

面向插件开发为系统提供一套稳定的框架,按需加载需要的插件,这样一来,系统便可以按需进行扩展,面向插件开发是面向接口开发,面向配置开发的完美结合。

5、善用方法的默认参数来扩展方法的功能

经常会在方法中需要使用一些作为默认值的字面量,但是在不久后的某一天,这些字面量的值说不定就需要修改。例如HTTP请求的超时。所以在含有这些字面量的方法中,可以考虑将这些字面量变为方法的默认参数的形式。使用默认值时,调用者无需关注他们,但需要修改默认值时,就可以传入相应的值即可。

6、使用扩展方法为类型添加方法

使用扩展方法,可以向现有类型“添加”方法。扩展方法不仅可以用来扩展系统类型,还可以扩展自定义类型。

本文谈到的“扩展”,除了涉及“软件系统的扩展”,还涉及“思维的扩展”。

思维的扩展,是指思考需要具有前瞻性和全面性。下面就给出几点实例来说明思维的扩展。

1、提供同步方法时,同时考虑提供一个异步方法

提供接口方法时,要习惯同时提供同步和异步两类方法。说不定哪一天就会使用到。

2、对于包含多个原子操作的接口方法,应该提供可以单独调用每个原子操作的接口方法

例如:读某类硬件,其中包含初始化,读,关闭硬件等原子操作。所以会提供下面的接口方法。

read()

{

start();

readHw();

stop();

}

但是仅仅提供一个read()方法,是不能满足所有需求的,假设突然要求在读操作中不需要读完就关闭硬件,那就不能单纯的调用这个read()方法了,所以最好能在提供read()方法之外,同时能够提供start()、readHw()、stop()等原子操作的方法。这样就可以满足一些个性化的需求了。

3、涉及到多线程操作时,需要同时提供线程安全的支持

多线程环境下,程序的运行会复杂很多,需要充分考虑线程的安全,才能使程序按照既定的逻辑运行。

4、调用第三方dll,可以同时提供动态和静态两种加载方式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息