「2019 JSConf.Asia - 尤雨溪」在框架设计中寻求平衡
框架取舍
Scope、Render Mechanism、State Mechanism
第一:职责范围。从本质说是指这个框架可以为你做多少事情。
第二:渲染机制。当你在使用一个框架的时候,你会如何表达你的视图层,框架如何处理代码?它是如何将实际渲染东西展示到页面上的?
第三:状态机制。可变和不可变,脏检查和依赖追踪,响应式和类响应式。
职责范围
一个框架能为我们做什么事情?
我们将它一分为二,从你们的角度来看,这个框架或库能做一些特有的小事情,从我们的角度来看,我们会有很多整体性的考量,拿框架来说,我会尽量提供尽可能多的特性。
1、React & Angular
React 接近于原生库,Angular 则提供更多抽象概念。
很少有人会去说清楚原理,这个库(React)专注于提供一个非常基础的 UI 模型,它专注于提供更底层的原生实现,基于此你可以构建出一套属于自己的抽象。
有意缩小职责范围(设计理念),这也是 React 整个生态系统非常活跃的原因所在,React的社区环境就像个商城(系统),围绕着 React 的核心模型自底向上建立起来的一整套生态系统。
另外一方面,像 Angular 以及其他的一些框架,如 Ember、 aralia 这种,则更像是大教堂吧。
它们则是自上而下进行设计的,在设计过程中,用户可能会遇到的问题都被考虑在内。
例如你们在日常开发中会经常遇到的表单验证,动画效果等等。
为了让框架可以给我们提供一个解决方案,在这个框架设计之初,我们就要以自上而下的方式来对它进行设计,即我们需要去思考如何将所有事情放到一起去工作。
有意扩大职责范围(设计理念),这个设计理念就是当你尝试解决一个问题时,你在框架内就能找到解决方案。
我们把这称之为大小职责范围(这里指两种设计理念),而这也没有好坏之说。
2、Small Scope
小的职责范围(设计理念)它的好处在于,刚开始的时候需要理解的概念很少。
而且它具有更好的灵活性。由于框架、库只提供了部分底层的原生实现,所以当你需要一个组件类的话,它得有一些 Props,然后你可以通过 Props 来传递数据,返回 VDOM 节点。