我们的产品底层是一个平台,提供基础业务,以及扩展API。在平台之上,通过个性化配置,和定制开发,得到最终的产品
本文不谈配置的事,只说说定制
平台发布到不同的项目之后,各项目自行定制。由于不同的项目需求差异较大,有时候平台提供的扩展API无法满足,项目就直接修改或增加平台的代码。但是这样就有个问题,平台就不能随意升级了,因为项目对平台代码的修改不可控,平台升级之后,很可能与定制的代码冲突
延伸一下,我想到其实用到的各种开源框架也有这个情况
以struts2为例,把struts2也看做一个平台。初级的开发者,只会用到平台默认的功能。高级的开发者,会对平台进行扩展,比如自定义Interceptor、Validator等
这种扩展,都是基于平台事先设计开放的API来进行的,是“合理的扩展”,或者说是“预期的扩展”。在struts2升级的时候,只要有意识地保持这些API的稳定,那么用户自定义的扩展就不会受到影响
另一种扩展,则是在struts2没有“预料”到的地方,直接修改了平台的源代码,那么这种扩展,就跟本文前面提到的现象一样,是一种“意外的扩展”,实际上不叫扩展,而是"hack",或者说“侵入”,是不鼓励的,因为框架升级以后,这些扩展很可能就冲突了。有时用户被逼无奈,必须做出这种选择。如果这种情况很多的话,那么可以认为框架的“扩展性”是比较差的
所以一个框架,应该在设计时,事先识别出扩展点,开放相应的API,以达到较好的扩展性。在升级时,也要注意向下兼容,尽量不要修改现有的接口
顺便也想通了一个问题,为什么很多开源框架都提供user guide和developer reference:
user指的是普通用户,不做扩展
developer指的是高级用户,会对现有框架做扩展,甚至修改,有时就是框架的作者
当然,这2类人群,实际上都是程序员
分享到:
相关推荐
新一代js与native交互框架,具有安全,简单,高可扩展性,在很多大厂有过类似实践
集中式集群资源调度框架的可扩展性优化.docx
zino是 Rust 中可组合应用程序的下一代框架 它强调简单性、可扩展性和生产力。
一个扩展性很强的Java通用网络框架
libPhenom:用于构建高性能和高度可扩展性系统的事件框架
wcf扩展性的例子
vs-mef, Visual Studio 使用的托管扩展性框架( MEF ) 实现 ( 管理扩展性框架工作室的视觉风格) 特性一个新的,更快的主机,为你现有的MEF部件重用已经使用的MEF属性ExportFactory<T> 支持创建具有作用域生命周期的子...
一个扩展性很强的Java通用网络框架
由于Java语言的面向对象性和跨平台性,这 使SSFNet具有良好的扩展性和可移植性。SSFNet的采用分层体系结构以及面向接口的设计 模式,这种设计方式减少了内核与组件以及组件之间的依赖性。本文首先描述Java的映射机 ...
SOFARPC 是一个高可扩展性、高性能、生产级的 Java RPC 框架。在蚂蚁金服 SOFARPC 已经经历了十多年及五代版本的发展。SOFARPC 致力于简化应用之间的 RPC 调用,为应用提供方便透明、稳定高效的点对点远程服务调用...
网易同事 周永昶 基于node.js的高可扩展游戏服务器框架 设计与实现 Node.js与游戏服务器; 游戏服务器框架的可扩展性和设计,以及pomelo的框架
一个扩展性很强的Java通用网络框架
强大易用、扩展性好的js验证框架。框架的一些特点: 1、易用是必须的,下载代码后,打开index.html,有使用手册和各种例子 2、灵活和强大是必须的。几乎适用所有的页面验证,尤其是复杂灵活的页面验证,譬如当A条件...
PHP实例开发源码—MyQEE PHP开源优越的扩展性多项目开发框架.zip PHP实例开发源码—MyQEE PHP开源优越的扩展性多项目开发框架.zip PHP实例开发源码—MyQEE PHP开源优越的扩展性多项目开发框架.zip
基于PHP的MyQEEPHP开源优越的扩展性多项目开发框架源码.zip
基于PHP的MyQEE PHP开源优越的扩展性多项目开发框架.zip
C#程序框架,可扩展性强,基于CS模式的C#程序框架
Hadoop+框架的扩展和性能调优
2.2.4可扩展性 2.3本章小结 第三章系统概要设计 3.1系统总体架构设计 3.1.1SpringBoot 架构 3.1.2Vue.js 架构 3.1.3负载均衡简介 3.1.4 Redis 集群简介 3.2系统工作流程 3.3数据库设计 3.4系统功能模块设计 3.4.1...