单体软件的复杂度达到一定阶段,插件化是必然的结果导向。
非常优雅,可以很好的解构业务之间的关联性。以及提供高 可扩展、可复用的方案。
然后我们还需要处理一下插件的一些问题,因为插件的更新和软件的更新并不同步。也就是我们需要一个管理插件的页面。提供简单的安装,更新和删除。
做到这一步的软件基本就是比较少见了。
对于大型软件,插件往往会有一个插件市场,用户可以自己上传、搜索、下载对映的插件。
但这是不好实现的。
由于插件和主软件的分离,最致命的问题是兼容性的问题。
软件的更新可能会导致插件不兼容,而不兼容的插件有可能造成软件无法打开,软件无法打开也就无法去禁用和删除插件。死循环。
不是什么大事,但对于没有经验的人而言,相当于电脑蓝屏,属于严重BUG。
插件系统的设计,的确是需要经验的。但经验又需要不断的迭代试错。
从可用,到一个相对完善的实现之间的距离还是差很多。
反复的迭代,的确会让设计更完善,但每次的变更都会带来可能造成的不兼容问题。
复杂度也不能太高,什么都往里面扔,从设计的角度来看是很失败的,过于复杂,会增加开发者的负担。
如果接入的逻辑为了完美做的很复杂,那么最后的结果就是别人宁愿另做一套,也不愿意做接入的工作。
如果一开始做的不复杂,接入容易,万一有机会做起来,那么原来的设计就成了一坨屎山。
也就是代码设计最重要的工作,并非是完成设计的工作。
而是提前预知到这套系统未来的极限工况,基于成本考量压缩在合理的范畴。