需求
《Clean Code》一书中有一章专门讲如何更好地使用第三方代码,当时没有什么体会,但最近的一个需求引发了我的思考。
事情是这样的,我们的系统中使用了一些jQueryUI里的控件,比如Dialog。
用了很长时间,也没什么问题,但昨天用户突然提出,这个Dialog能不能最大化?
查询文档后结论是不能,但有另一个插件叫WijDialog,扩展了jQueryUI的Dialog,提供了更多的功能。
使用方式也稍有不同:
$("#dialog").wijdialog();
问题
这时就出现一个问题,如果要将系统中所有的Diaglog替换成WijDialog,必然要改动很多代码,同时就将引入错误的机会放大了。
那么如何避免这个问题呢?
解决方案
我们都知道“面向接口编程”,也就是为了隔离变化,在不影响客户端代码的前提下我们就可以平滑地切换到另一种具体实现。
我们可以使用Adapter模式,增加一个自己的公共库,提供myDialog方法,在这个方法里去调用第三方的方法实现功能。
从而将具体的jQueryUI Dialog或者WijDialog隐藏起来,让客户端不知道它的存在。
这样我们就可以在任何时候平滑地切换第三方库了。
No comments:
Post a Comment