平等对待第三方的“微内核+插件”设计思想
“微核+插件”体系组装。但凡有生命力的产品,都是在扩展性方面设计的比较好的,因为没有哪个产品可以覆盖所有需求,对于开源软件尤其如此。所以,产品只有具有良好的扩展性,允许用户或第三方参与进来,进行二次开发,才能保持生命力。怎么样的扩展性才是最好的?通常来讲,就是没有任何功能是硬编码的,所有的功能都可被用户替换。那要如何才能做到这样?一个重要的原则就是:平等对待第三方。也就是凡是原作者能实现的功能,第
互联网企业要做大做强,“平台化”是绕不过的一个坎。抛开具体业务,如何在软件架构体系上支持平台化发展,是我最近在考虑的问题。
“微内核”设计思想很早就提出来了,以前我曾经在开发传统的套装软件上运用过,现在看来同样也适用与互联网基础软件平台研发。以下内容来自“HTTL模板引擎”设计理念:
但凡有生命力的产品,都是在扩展性方面设计的比较好的,因为没有哪个产品可以覆盖所有需求,对于开源软件尤其如此。所以,产品只有具有良好的扩展性,允许用户或第三方参与进来,进行二次开发,才能保持生命力。
怎么样的扩展性才是最好的?通常来讲,就是没有任何功能是硬编码的,所有的功能都可被用户替换。
那要如何才能做到这样?一个重要的原则就是:平等对待第三方——也就是凡是原作者能实现的功能,第三方也要能够在不改变源代码的前提下实现。换言之,原作者应把自己也当作扩展者,自己添加功能时,也要用第三方扩展者同样的方式进行,而不要有特权。
要做到这一点,就需要一个良好的框架支撑,“微内核+插件”是一个不错的选择,Eclipse、Maven等知名软件都采用该体系。
什么是“微内核+插件”?微内核,即最小化核心,内核只负责插件的组装,不带任何功能逻辑,所有功能都由可替换的插件实现,并且,组装过程应基于统一的规则,比如基于setter注入,而不能对不同插件硬编码组装,这样可以确保没有任何功能在内核中硬编码。比如:Spring, OSGI, JMX, ServiceLoader等都是常见的微核容器,它们负责基于统一规则的组装,但不带功能逻辑。
非功能性的插件组装过程,可以由微内核框架来完成,那功能性的组装怎么办呢?我们可以把功能性的组装过程也封装成插件,即让大插件组装小插件,形成级联组装关系。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)