TW的杨博有一段话让我印象非常深刻,大意是说:“先考虑怎么表达问题,再考虑怎么解决问题。一开始实现一个库,我只考虑问题用什么方式描述出来最简单,边界最清晰。”
他在IE6的时代已经实现了当代类似ReactJS前端新潮框架的数据绑定的功能,叫做Binding.scale。他首先将需要解决的问题描述得非常清楚:“前端的组件化(Component)这种概念和语言原生的对象、函数相比,并没有本质的区别,并不是要解决问题的一部分,而是为了解决问题所延伸出的概念。”
根据奥卡姆剃刀定律,并不需要额外发明Component,不如用原声的函数、变量与参数表达GUI和交互,在GUi方面,ASP、JAVA之类的库早已做了很多年。唯一难以表达的是交互。
那么交互所需要的最简单模型是什么?审视ReactJS最有用的部分,发现就是数据绑定功能,所以,只有数据绑定这一个功能需要实现。而Component、State、prop全部都不需要。
AngularJS绝对是一大反例,开发小组都自己打自己脸赶着出第二版了,还和前一个版本不兼容
这叫定义第一。
2,其后做抽象建模问题定义得越清晰,越少,那么需要解决的问题就越少,可能延伸出的其它问题也就越少。开发成本可能在第一阶段就压缩了一大半。
第二步是建模,我认为建模的本质既非定义数据接口,也非定义抽象层次,建模的本质是“声明”,用程序去声明这个问题。
程序的本质复杂性在于声明,不在于实现(或者叫做控制),Program=declaration+Control。声明是程序的灵魂,它定义了程序的本质;实现是为声明服务的,是非本质的,可以变化的。
看Java的Collections.sort方法的例子:
interfaceComparator{int北京治疗白癜风的最好的医院北京治疗白癜风哪最好