设计原则之最少知识原则 javascript

来源:互联网 发布:多头螺纹怎样用g92编程 编辑:程序博客网 时间:2024/05/22 01:37

一个软件实体应当尽可能少地与其他实体发生相互作用,这就是最少知识原则(LKP),所谓软件实体是一个广义的概念,包括系统,类,,对象,模板,函数,变量等。而在javascript中,软件实体大多指的是对象的概念,一般来说,减少对象之间的联系首先要做好对对象的封装,使其暴露出有限的接口和内容,其次是javascript中对象繁多,包括自带的window,location等,再加上各种自定义对象,按照单一职责原则来说程序中很容易出现复杂的对象关系网,而此时就需要最少知识原则来减少对象之间的耦合了。

最少知识原则要求我们如果两个对象之间不必彼此直接通信,那么这两个对象就不要发生直接的相互联系。我们常见的做法是引入一个第三方来作为中介转发对象之间的请求,最能体现LKP的是中介者模式和外观模式。

中介者模式比较常见,通过增加一个中介对象来管理多个对象之间的通信,以后我也会在我的博客里着重介绍,有兴趣的朋友可以自行查阅,下面着重介绍一下外观模式,其在javascript中的刻意应用的场景并不是那么多或者说其实我们无时无刻不在用外观模式,只是他有一点不起眼。外观模式主要是为子系统中的一组接口提供一个一致的界面,也就是一个高层的接口,以便使得整个系统的可用性增强,但是这个高层接口并没有屏蔽掉下面接口的调用,高层接口只是提供了一个统一调度整个系统的接口。下面举一个最简单的例子。

var a = function(){    alert(1);};var b = function(){    alert(2);};var facade = function(){    a();    b();};facade();

外观模式的关键是定义一个高层接口去封装一组子系统,其作用主要是为子系统提供一个简单便利访问的入口和隔绝客户与复杂子系统之间的联系,从后者来看无疑是减少了实体间的相互作用,也就是符合最少知识原则的,而同时他们其实也是符合单一职责原则的,高层接口只负责整合子系统提供接口,子系统各司其职,改变高层接口不会影响子系统正常调用,改变子系统高层接口也不会受到影响。

最后要提及的一点就是,并不是所有的情况必须使用最少知识原则,实际的开发环境,产品需求功能都是千变万化的,要根据具体环境选择是否跟从原则,最少知识原则原则绝不是万能的,固然他可以让实体之间的联系变少,增强代码的可维护性,但是滥用很有可能会创造出庞大到难以维护的第三方。


0 0
原创粉丝点击