插件系统[2]·配置还是派生

来源:互联网 发布:ping 端口 编辑:程序博客网 时间:2024/05/16 05:49
上个月写了一篇关于插件系统的文章,也是我现在一直在做的一个项目。在实现这个基于插件机制的系统过程中有不少自认为有意思的地方。这里写出来与大家共享。

在插件系统中,每一个插件都有自己的一些配置信息,比如说图标信息、界面显示信息等。如果以前做了一个插件,发现另外一个插件和它的功能差不多的时候该怎么办呢?可以用配置文件将不同的地方描述出来,也可以在以前的基础上做一个派生类。到底是用配置还是用派生,这个问题就有趣了。

都是变化惹得祸

中国特色的软件产品就是地区版本多,同样一件事情每个地方规则都不一样。比如说做了一个功能,在北京用没有问题,拿到上海去就不符合要求了。地区特性要求我们的软件必须要响应变化。

出现变化后的第一个反应就是OO了。有着各式各样的设计模式来教我们怎样利用OO的特性来应对变化。

比如说现在需要一个计算个人所得税的模块。

计算的思路都是一样的,但由于地区经济的差异,所以在有些数据上各个地方会略有不同。

按照OO的思想来考虑,我们可以做一个计算的基类,利用模板方法将各地不同的地方做成虚函数。基类中处理具体计算的算法,派生类中处理地区差异,比如说各地的税收起征额不同。在到具体地区实施时只需要选择不同的派生类就可以了。并且也非常方便扩展。如下面的TaxCalculator1。
同时也有另外一种思路,在TaxCalculator2中没有什么虚函数,也不存在派生类,不过它运行的时候需要一个配置文件,在配置文件中描述地区差异。

当然,这里说的是一种非常简单的情况,在实际的应用中比这个要复杂的多。

就上面分析的来看,似乎用派生和配置两种方案都可以。如果是OO思想的“崇拜者”很可能觉得第一种方法更好,因为第二种方法不是面向对象的思路。

考虑成本

在项目中遇到这个问题时,是和插件机制联系起来的。也就是说插件之间从逻辑上讲是“派生”的关系(一个插件为一个DLL文件)。如果按照类派生的方式来处理,则需要将不同的派生类分别编译成不同的DLL发布出去;如果用配置文件则只需要发布一个DLL文件另外附加上不同的配置文件。

从插件发布的角度考虑,用配置文件的代价要更小。所以在实际的项目中,采用第二种方式居多。并且在非插件系统中用派生方式实现的模块也尽量考虑用配置文件的方案。

其实在这里我考虑的最主要的因素是“成本”,分为下面两个部分。

维护成本

用派生的方式实现,在维护期间需要维护的是代码;用配置文件的方式实现,在维护期间代码不需要维护,只需要改变配置就可以满足要求。我们认为维护代码的成本比维护配置的成本要高。

发布成本

用派生实现,需要发布给用户多个DLL文件;用配置文件实现,需要发布给用户一个DLL文件,多个配置文件。我们认为发布DLL的成本比发布配置文件的成本要高。

结合上面的成本因素来考虑,用配置文件的成本要低,所以选择这种方式。

产品是二进制文件

我们的产品是什么?以前很直观的认为程序员的产品就是代码。

代码和设计文档、计划文档一样都不是最终产品,它们都属于文档的范畴。最终生成产品的不是我们程序员,而是编译器。代码是一种文档,编译后生成的二进制文件才是产品。

在项目中,我们会考虑从设计文档到代码需要的成本,但极少考虑从代码到二进制需要的成本。原因很简单,因为从代码到二进制的过程太廉价了。通常我们不需要考虑编译过程的成本因素。

由此来看,上面提到的“发布成本”是可以忽略不计的。

动态语言的优势

关于维护成本这一点,就是仁者见仁,智者见智了。

有的人就喜欢读代码:) 所以很难说维护代码和维护配置文件那一个成本高了。不过有一点没有争议,那就是到了用户那边,二进制文件可是没有办法改的了。

有些喜欢刨根究底的人就会进一步钻牛角尖,就像我一样。

如果用动态语言又会是什么样的情况呢?

因为动态语言不需要编译成二进制文件,所以它就是一种可以运行的文档了。可以将我们系统中的配置文件当作动态语言的一种,不过它只能决定简单的行为。因为配置文件毕竟不支持“封装”、“继承”和“多态”。用真的动态语言的话,既可以得到配置文件灵活的优势,又可以得到编程语言强大的功能。

从这点来看,动态语言在这个场合还是非常有用的。

 


上个月写了一篇关于插件系统的文章,也是我现在一直在做的一个项目。在实现这个基于插件机制的系统过程中有不少自认为有意思的地方。这里写出来与大家共享。

在插件系统中,每一个插件都有自己的一些配置信息,比如说图标信息、界面显示信息等。如果以前做了一个插件,发现另外一个插件和它的功能差不多的时候该怎么办呢?可以用配置文件将不同的地方描述出来,也可以在以前的基础上做一个派生类。到底是用配置还是用派生,这个问题就有趣了。

都是变化惹得祸

中国特色的软件产品就是地区版本多,同样一件事情每个地方规则都不一样。比如说做了一个功能,在北京用没有问题,拿到上海去就不符合要求了。地区特性要求我们的软件必须要响应变化。

出现变化后的第一个反应就是OO了。有着各式各样的设计模式来教我们怎样利用OO的特性来应对变化。

比如说现在需要一个计算个人所得税的模块。

计算的思路都是一样的,但由于地区经济的差异,所以在有些数据上各个地方会略有不同。

按照OO的思想来考虑,我们可以做一个计算的基类,利用模板方法将各地不同的地方做成虚函数。基类中处理具体计算的算法,派生类中处理地区差异,比如说各地的税收起征额不同。在到具体地区实施时只需要选择不同的派生类就可以了。并且也非常方便扩展。如下面的TaxCalculator1。
同时也有另外一种思路,在TaxCalculator2中没有什么虚函数,也不存在派生类,不过它运行的时候需要一个配置文件,在配置文件中描述地区差异。

当然,这里说的是一种非常简单的情况,在实际的应用中比这个要复杂的多。

就上面分析的来看,似乎用派生和配置两种方案都可以。如果是OO思想的“崇拜者”很可能觉得第一种方法更好,因为第二种方法不是面向对象的思路。

考虑成本

在项目中遇到这个问题时,是和插件机制联系起来的。也就是说插件之间从逻辑上讲是“派生”的关系(一个插件为一个DLL文件)。如果按照类派生的方式来处理,则需要将不同的派生类分别编译成不同的DLL发布出去;如果用配置文件则只需要发布一个DLL文件另外附加上不同的配置文件。

从插件发布的角度考虑,用配置文件的代价要更小。所以在实际的项目中,采用第二种方式居多。并且在非插件系统中用派生方式实现的模块也尽量考虑用配置文件的方案。

其实在这里我考虑的最主要的因素是“成本”,分为下面两个部分。

维护成本

用派生的方式实现,在维护期间需要维护的是代码;用配置文件的方式实现,在维护期间代码不需要维护,只需要改变配置就可以满足要求。我们认为维护代码的成本比维护配置的成本要高。

发布成本

用派生实现,需要发布给用户多个DLL文件;用配置文件实现,需要发布给用户一个DLL文件,多个配置文件。我们认为发布DLL的成本比发布配置文件的成本要高。

结合上面的成本因素来考虑,用配置文件的成本要低,所以选择这种方式。

产品是二进制文件

我们的产品是什么?以前很直观的认为程序员的产品就是代码。

代码和设计文档、计划文档一样都不是最终产品,它们都属于文档的范畴。最终生成产品的不是我们程序员,而是编译器。代码是一种文档,编译后生成的二进制文件才是产品。

在项目中,我们会考虑从设计文档到代码需要的成本,但极少考虑从代码到二进制需要的成本。原因很简单,因为从代码到二进制的过程太廉价了。通常我们不需要考虑编译过程的成本因素。

由此来看,上面提到的“发布成本”是可以忽略不计的。

动态语言的优势

关于维护成本这一点,就是仁者见仁,智者见智了。

有的人就喜欢读代码:) 所以很难说维护代码和维护配置文件那一个成本高了。不过有一点没有争议,那就是到了用户那边,二进制文件可是没有办法改的了。

有些喜欢刨根究底的人就会进一步钻牛角尖,就像我一样。

如果用动态语言又会是什么样的情况呢?

因为动态语言不需要编译成二进制文件,所以它就是一种可以运行的文档了。可以将我们系统中的配置文件当作动态语言的一种,不过它只能决定简单的行为。因为配置文件毕竟不支持“封装”、“继承”和“多态”。用真的动态语言的话,既可以得到配置文件灵活的优势,又可以得到编程语言强大的功能。

从这点来看,动态语言在这个场合还是非常有用的。

 


上个月写了一篇关于插件系统的文章,也是我现在一直在做的一个项目。在实现这个基于插件机制的系统过程中有不少自认为有意思的地方。这里写出来与大家共享。

在插件系统中,每一个插件都有自己的一些配置信息,比如说图标信息、界面显示信息等。如果以前做了一个插件,发现另外一个插件和它的功能差不多的时候该怎么办呢?可以用配置文件将不同的地方描述出来,也可以在以前的基础上做一个派生类。到底是用配置还是用派生,这个问题就有趣了。

都是变化惹得祸

中国特色的软件产品就是地区版本多,同样一件事情每个地方规则都不一样。比如说做了一个功能,在北京用没有问题,拿到上海去就不符合要求了。地区特性要求我们的软件必须要响应变化。

出现变化后的第一个反应就是OO了。有着各式各样的设计模式来教我们怎样利用OO的特性来应对变化。

比如说现在需要一个计算个人所得税的模块。

计算的思路都是一样的,但由于地区经济的差异,所以在有些数据上各个地方会略有不同。

按照OO的思想来考虑,我们可以做一个计算的基类,利用模板方法将各地不同的地方做成虚函数。基类中处理具体计算的算法,派生类中处理地区差异,比如说各地的税收起征额不同。在到具体地区实施时只需要选择不同的派生类就可以了。并且也非常方便扩展。如下面的TaxCalculator1。
同时也有另外一种思路,在TaxCalculator2中没有什么虚函数,也不存在派生类,不过它运行的时候需要一个配置文件,在配置文件中描述地区差异。

当然,这里说的是一种非常简单的情况,在实际的应用中比这个要复杂的多。

就上面分析的来看,似乎用派生和配置两种方案都可以。如果是OO思想的“崇拜者”很可能觉得第一种方法更好,因为第二种方法不是面向对象的思路。

考虑成本

在项目中遇到这个问题时,是和插件机制联系起来的。也就是说插件之间从逻辑上讲是“派生”的关系(一个插件为一个DLL文件)。如果按照类派生的方式来处理,则需要将不同的派生类分别编译成不同的DLL发布出去;如果用配置文件则只需要发布一个DLL文件另外附加上不同的配置文件。

从插件发布的角度考虑,用配置文件的代价要更小。所以在实际的项目中,采用第二种方式居多。并且在非插件系统中用派生方式实现的模块也尽量考虑用配置文件的方案。

其实在这里我考虑的最主要的因素是“成本”,分为下面两个部分。

维护成本

用派生的方式实现,在维护期间需要维护的是代码;用配置文件的方式实现,在维护期间代码不需要维护,只需要改变配置就可以满足要求。我们认为维护代码的成本比维护配置的成本要高。

发布成本

用派生实现,需要发布给用户多个DLL文件;用配置文件实现,需要发布给用户一个DLL文件,多个配置文件。我们认为发布DLL的成本比发布配置文件的成本要高。

结合上面的成本因素来考虑,用配置文件的成本要低,所以选择这种方式。

产品是二进制文件

我们的产品是什么?以前很直观的认为程序员的产品就是代码。

代码和设计文档、计划文档一样都不是最终产品,它们都属于文档的范畴。最终生成产品的不是我们程序员,而是编译器。代码是一种文档,编译后生成的二进制文件才是产品。

在项目中,我们会考虑从设计文档到代码需要的成本,但极少考虑从代码到二进制需要的成本。原因很简单,因为从代码到二进制的过程太廉价了。通常我们不需要考虑编译过程的成本因素。

由此来看,上面提到的“发布成本”是可以忽略不计的。

动态语言的优势

关于维护成本这一点,就是仁者见仁,智者见智了。

有的人就喜欢读代码:) 所以很难说维护代码和维护配置文件那一个成本高了。不过有一点没有争议,那就是到了用户那边,二进制文件可是没有办法改的了。

有些喜欢刨根究底的人就会进一步钻牛角尖,就像我一样。

如果用动态语言又会是什么样的情况呢?

因为动态语言不需要编译成二进制文件,所以它就是一种可以运行的文档了。可以将我们系统中的配置文件当作动态语言的一种,不过它只能决定简单的行为。因为配置文件毕竟不支持“封装”、“继承”和“多态”。用真的动态语言的话,既可以得到配置文件灵活的优势,又可以得到编程语言强大的功能。

从这点来看,动态语言在这个场合还是非常有用的。

 


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 参加水果展没有实物怎么办 没做过运营面试怎么办 苹果5s16g内存满了怎么办 618天猫有活动淘宝没有怎么办 天猫国际买到假货怎么办 天猫恶意差评怎么办 天猫删除差评被扣分了怎么办 天猫收到差评怎么办 天猫给差评骚扰怎么办 天猫客户差评怎么办 天猫没法给差评怎么办 天猫上限购一件怎么办 拍下商品不发货怎么办 天猫红包过期了怎么办 买天猫店被中介骗了钱怎么办 速卖通假货纠纷怎么办 天猫新开店被恶意拍下怎么办 新开的天猫店没有生意怎么办 银行的支票丢了怎么办 天猫积分用光了怎么办 淘宝店没有无线流量怎么办 京东卖家不发货怎么办会自动打款 一件代发顾客如果退款怎么办 京东以前的账号怎么办 旺旺对话框订单页面变宽了怎么办 阿里巴巴店铺上传图片很模糊怎么办 天猫跨店优惠券用了退货怎么办 淘宝店铺没流量没访客怎么办 京东微信和Q端黑号了怎么办? 买不了运费险了怎么办 拼多多5天不发货怎么办 天猫店手机发货成定制机怎么办 天猫退货上门取件退两件怎么办 买二手苹果手机没有账号怎么办 手机淘宝足迹不更新怎么办 淘宝申请退款不想退了怎么办 荣耀3c主板坏了怎么办 荣耀10天气删了怎么办 荣耀7i手机卡顿怎么办 荣耀v9总是自己拨号怎么办 华为荣耀5x很卡怎么办