Comments (7)
确实,不能因为只用到一个mix方法而require一个class或base,但是这样的话,是不是有些职责混乱?Events的职责主要提供一套事件机制,如果冒出个mixTo,感觉有些怪。另外我觉得如果大家都同意的话,移动平台也可以直接使用原生的枚举方法
from aralejs.github.io.
这是个很有意思的话题,越来越觉得,代码零重复的追求,其实不利于解耦。
比如有理论洁癖的 YUI3,如果一个模块 A 用到 xx 方法,另一个模块 B 也需要用到 xx 方法,那么 YUI3 会把这个 xx 方法拎取出来,放到一个更基础的 C 模块中去。
看起来多美妙呀。
然而实际上,越追求代码零重复,会让各个模块之间的关系越复杂:
// 箭头表示依赖
A --> B --> C ...
B --> D --> Q ...
Q - > Z -> A ...
最后,可以说因为追求代码零重复,使得所有代码都被绑定到一起了,成为了一个巨无霸!
问题是,巨无霸经常并不是我们需要的!比如 ExtJS、比如 YUI3, 比如 Windows 操作系统⋯⋯
反观 jQuery 社区,以及 NodeJS 社区,他们更追求独立,而不是代码零重复!
underscore 和 jquery 存在交集,express 和 node/lib 也存在交集,backbone 里有些代码,在 jquery 里有实现,乱七八糟的呀⋯⋯
然而正是这种**“适量重复”**,保持了各个组件的独立性和专注性,一独立一专注,就可以像 Unix 中的模块一样灵活组装起来,最后可做的事情,往往比巨无霸能做的事情多,而且性能很可能更好⋯⋯
适量重复,非常有意思。何为适度?权衡在心,目前这个心是依赖、是独立、是组件的粒度、是直觉。
from aralejs.github.io.
"适量重复"对于一个实际的需求,有时候比较难衡量的,
比如说,A个组件需要调用B的一个位置组件的计算DOM元素位置的一个方法,但是他发现,B的那个组件实际是计算DOM元素的位置其实是调用jquery的DOM元素位置的方法,A的组件为了计算DOM元素位置组件,条用了B组件同时,间接也调用了Jquery,A组件的开发人员会想,我只是为了计算DOM元素位置,却莫名调用了两个js类库(B和jquery),这个和自己实现起来不一定合算,但是如果自己实现的话,又违背了代码零重复的原则。碰到这种场景,我觉得A组件的开发人员会比较纠结...
还有一种情况,如果有两个方法,一个需要调用B组件,一个需要jquery,然后开发人员,B组件的实现方法不过在jquery上又封装了一层,这样的话,是否需要再调用B组件?直接jquery是否能更好,当然这个前提是开发人员比较了解B组件的实现方法...
更加复杂的场景是有三个方法,B组件都能提供,不过开发人员发现,其中2个方法,B组件不过是调用jquery实现的,这样还不如直接调用jquery来实现,还有一个方法确实是B组件原生提供的,不过开发人员可能会想,这个实现比较简单,我自己实现可能比只是为了实现这个方法调用B组件,不太合算...还不如自己实现,不过如果这样的话,感觉就比较乱...
我觉得在碰到实际开发的场景时候,"适量重复"可能更多靠的是经验和对一个具体场景的判断
from aralejs.github.io.
@semious 我的想法是这样的:
A 组件是否调用 B 组件,取决于 A 组件在调用 B.xxMethod 时,B.xxMethod 方法是不是 B 组件的核心功能,如果是,就果断调用,没必要在 A 组件里自己再实现一把,如果 xxMethod 不是 B 组件的核心功能,则可以考虑在 A 组件里自己实现一个。
是否核心功能,取决于我们对组件的定位。比如我们对 jQuery 的定位是 DOM/Ajax/Anim 操作类库,那么凡是需要用到这些操作时,大胆调用就好。但是,如果仅仅需要调用 $.extend
或 $.each
, 则需要权衡考虑是否有必要。如果 A 组件对 jQuery 的依赖仅仅是 extend
等辅助方法,我推荐 A 组件自己去实现就好。
适量重复,看似很难把握,但只要放到具体代码中来权衡,我觉得还是可以找到比较合适的权衡点的。
由于 Events 组件已经添加 mixTo 方法,该 issue 先关闭,不过大家可以继续讨论。
from aralejs.github.io.
每天看你们的讨论也是种享受,有时候会让自己瞬间豁然~
jQuery 的 Anim,要是能使用 CSS3,再加 fallback 就好了,我就不用费神自己开发~
非常希望能得到大侠们的指点,每天进步一点点~
https://github.com/jsw0528/Transition
http://mrzhang.me/blog/jquery-transition.html
from aralejs.github.io.
@jsw0528 建议建一个 issue 到 jquery 的 github 上,我记得曾经有人提出,后来不知什么原因没上,可以再去提提。
from aralejs.github.io.
@lifesinger 他们把 issue 关了~
from aralejs.github.io.
Related Issues (20)
- 关于base里面的destory方法
- concat链接中有回车符,firefox(linux/ff-30)无法加载. HOT 2
- 建议加个bt2.1.3吧 我自己改了一个 HOT 3
- 用spm安装到本地时怎么选择特定版本? HOT 1
- 会不会考虑加入jqGrid或类似组件? HOT 2
- 官网打不开 HOT 2
- 大半年过去了,似乎都没有什么大的更新呢 HOT 3
- 关于 Arale 的过去、现在和未来 HOT 27
- arale calendar dialog confirm-box 初始化第一次偶尔不执行 刷新一次后就好了 HOT 2
- 日历插件有监听选择日期后的事件吗? HOT 1
- aralejs.org 迁移到 spm3
- aralejs 设计的这么优雅,为什么没有火起来? HOT 7
- spm安装的js无法导入 HOT 6
- 部署也太麻烦了吧
- 用aralejs写业务代码有没有什么最佳实践呢?希望可以回复或讨论一下 HOT 1
- 官网首页出问题了?首页的内容不显示 HOT 2
- 按照官网的步骤创建模块报错了 HOT 1
- Calendar在IE8下报错运行不了 HOT 1
- 官网链接失效(docs/attribute.html) HOT 2
- 官网502啦~ HOT 9
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from aralejs.github.io.