Omi的理念是基于面向对象编程体系,内建积木系统。 传统的单向数据流或者抛出event的组件通讯方式增加了系统的稳定性,但是丧失了灵活性。一定程度上也降低了组建的复用。所谓鱼和熊掌不可兼得。 面向对象体系需要多一个逻辑层,可以自由操作所有组件的instance,instance之间的逻辑关系构建出了整个程序。这样组建间的逻辑,通信,复用就全部迎刃而解。组建也更加单一职责,更松耦合。
对比函数式编程、命令式编程与面向对象编程,可以归纳总结出下面几条:
- 命令式编程干脆直接,利用循环条件等控制流程,强调执行过程
- 命令式编程对硬件执行友好,运行更容易,却阻碍了复杂程序的设计
- 函数式强调输入和输出,并非执行过程
- 函数式倡导多个简单执行单元组合成复杂运算程序
- 面向对象编程将对象作为程序的基本单元,更具有重用性、灵活性和扩展性
Javascript是哪种类型的语言?现在ES6+已经有了class。那么他是面向对象语言? 但是JS可以在任意地方定义函数并且当作把函数当作值来传递。那么他是函数式编程语言? 所以,没有精准的定义,取决于你的用法和姿势。其次,Web组件化架构层面编程模型和语言层面编程模型是非常自由的关系。意思就是,你可以用Javascript构建函数式编程框架如React,也可以基于面向对象体系搭建Omi。
函数式编程 VS 面向对象编程
在UI组件框架层面,函数式编程的代表有React,Omi属于面向对象编程体系。那么他们各有什么优缺点?下面做了个对比(其实也是函数式编程与面向对象编程的对比):
React | Omi | |
---|---|---|
组件通信 | ★★★★☆ | ★★★★★ |
稳定性 | ★★★★★ | ★★★★☆ |
灵活性 | ★★★★☆ | ★★★★★ |
扩展性 | ★★★★☆ | ★★★★★ |
测试性 | ★★★★★ | ★★★★☆ |
文件大小 | ★★★☆☆ | ★★★★★ |
功能特性 | ★★★☆☆ | ★★★★☆ |
DOM性能 | ★★★★★ | ★★★★☆ |
动画性能 | ★★★★☆ | ★★★★★ |
抽象复杂度 | ★★★★☆ | ★★★★★ |
异步编程 | ★★★★★ | ★★★★☆ |
可以看得出,鱼和熊掌不可兼得。面向对象编程更具有重用性、灵活性和扩展性,带来的问题就是更加难测试。 具体来说,如函数式编程,其测试面积是state1 + state2 + ... + stateN;在面向对象编程中,其测试面积是state1×event1 + state2×event2 + ... + stateN×eventN。
总结来说,更加推荐使用面向对象的方式去搭建UI组件化框架。
转载本站内容时,请务必注明来自W3xue,违者必究。