|
很久不上论坛了,不过看到这么个有意思的讨论还是忍不住想来掺和几句。
首先大赞木头猫的热情和干劲,有技术的人很多,有热情的人也有很多,又有技术还有热情,同时愿意坐下来写点东西无偿分享的人真的很少很少。不过根据做了几年开源项目得来的粗浅经验来看,一旦决定做开源公开了自己的作品,就一定要彻底开放自己的心态,程序员一定程度上类似于作家,不过只有做开源的程序员才更像一个真正的作家,这时候,你就会迎来四面发放的评价,或欣赏,或鼓励,不过不管什么项目,即便牛至Linux, GTK, Qt这样的,遇到更多的评价就是批评。对品味的批评,对细节的批评,对理念的批评,不一而足,如果你只活在这些批评里,很可能很快就会自我放弃。
所以,想干好开源项目,就要有一颗坚强的心脏和足够厚的脸皮,然后还得有足够开放的心胸。 因为你的项目的批评者,往往是你最忠实的用户, 比如木头猫这个项目,我好多天前就知道了,但是一直真的用心去看,更没去写点demo体验一下,对细节的观摩和理解也比black_zerg相去甚远。 想想看,往往最保守批评嘲讽的技术却最成功: C++, Java, Linux, OOP.... 对于这一点,C++的作者一句话说得好:世界上只有两种编程语言,一种是人人都在抱怨的,另一种是没有人用的。所以,如果我做的一个JS项目收获到了像Hibernate, Spring, Struts, NodeJS, jQuery那么多的潮水般的抨击,我睡觉时都会乐醒。
~~~以上务虚吹水,连鸡汤都算不上,只能算鸡精,下面就具体的几个技术表达下我的肤浅观点~~~
1. MVVM
http://en.wikipedia.org/wiki/Model_View_ViewModel
其实这个名词我才知道,以前只知道MVC, MV, 一开始还以为MV居然还搞出虚拟机了 不知道可以,不学习就可耻了,赶紧上维基补课,想一起补课请自觉的点上面的链接。看完词条我学到了:
1. 顺便知道了还有MVP, MVB的存在,他们本质上都是关于Model和View的分离以及互相通讯的,叫法和侧重点不同
2. MVVM是一种关于架构方面的模式,主要用于基于事件驱动的GUI编程领域
3. 一开始用在.NET平台的WPF/SilverLight上,用一坨坨.net语言和XAML界面描述语言来具体体现
4. 分三个部分: Model, View和ViewModel
关于M和V,大家都一样, 剩下的M和V如何交互的地方大家都在做文章。
MVC : C = Controller, 负责处理从V过来的交互输入(数据和事件),还负责从M过来的数据更新,此外还负责应用逻辑,所以这个C最难写,现实中往往就把C和M或者C和V混在一起,或者人格分裂,M和V一人一半,这样MVC就悲剧的退化了。
Controller有时候也叫Delegate, 比如在Qt里。
MVVM = MVB: B = VM = Binder = ViewModel, 这个是MVVM的另一种叫法,这个让人理解起来更为清晰一点。
这个Binder (ViewModel)和Controller做的事情其实差不多,和Controller的最大区别就是Controller既依赖于Model,又依赖于View, 本身还有应用逻辑, 这会让Controller的测试很难搞,所以便于分离测试是出发点之一。
另一个考虑就是,从实践上来看,C最容易和V搞基,傻傻分不清楚,这很容易让代码退化,让V变成C,然后前端射鸡虱就不答应了,你们程序猿这么折腾这可让臣妾如何射鸡啊..... 所以Binder的一个目的就是尽量干净,彻底,绝情地从V里去掉尽可能多的C。不过鉴于实现V的那一坨可选的语言里,从语言本身可是都能够写出C的,君不见程序猿茶余饭后最喜闻乐见的娱乐活动就是用XML实现if-else-for, 让CSS支持逻辑控制,最不济,只要爷高兴,爷就能把一个ERP系统的完整代码塞在一个div的tag......
为了遏制射鸡师不断攀升的自杀率,微软挤出XAML,说咱不能在这玩意里写code,一句也不行,"理论上", 这就阻断了C和V搞基的可能,和M暗送秋波只能通过Binder,互相放电也行,反正Binder不直也不弯,就是个双工的传声筒。 (当然我不看好XAML,因为XAML就是XML,而程序猿早就知道怎么蹂躏XML了...).
抄来MVVM的具体实践指南: (http://stackoverflow.com/questio ... etween-mvc-and-mvvm)
1. Views display a certain shape of data. They have no idea where the data comes from.
2. ViewModels hold a certain shape of data and commands, they do not know where the data, or code, comes from or how it is displayed.
3. Models hold the actual data (various context, store or other methods)
4. Controllers listen for, and publish, events. Controllers provide the logic that controls what data is seen and where. Controllers provide the command code to the ViewModel so that the ViewModel is actually reusable.
所以,在MVVM里,Controller还是存在滴,只不过干的事情少了一些,和V之间插了个无性别倾向的第三者:邦德 Binder。正应了软件界的一句谚语:关于软件开发的任何难题都可以通过增加一个中间层来解决。
有趣的,维基上列的对MVVM的批评(或者忠告),来自于MVVM概念的创造者,主要包括:
1. 对简单小巧的UI而言太over-kill
2. 对复杂大型的应用而言,抽象和泛化View又太困难
3. 对data-binding而言,如果实现的不够好,可能会导致内存消耗大量增加 (我觉得对CPU的负担也是个必须考虑的部分)
~~~~~~~~~~~~~~~~~
关于data binding
比较文艺的说法是data binding属于reactive programming的范畴。关于这个话题,我不太同意黑虫的观点,不过比较赞同他对javascript和HTML上做data binding的吐槽。这是因为,reactive programming本身是个很优美很理想的东西, 但是现在大部分编程语言是不直接支持reactive programming的,所以就必须用比较ugly的方式来实现, 比如通过HTML的tag。关于这方面,我觉得QML支持reactive programming比较好 (当然是因为我比较深入弄过一段时间QML), 算是接近native支持reactive programming了。 如果有一天HTML和JS规范本身能够引入data binding语义,那么世界会美好很多。
往往技术的演化就是这样, 大家先做梦,如果TMD有个X功能就好了, 然后大家去实践, 通过A, B, C, D的E,F, G, I加上某些magic,就能实现或逼近X的功能或理念,咱然后大家就觉得这些具体实现都太TMD恶心了,那么X还是远远的,可望不可即,可远观不可亵玩矣,就像程序猿隔壁的女神一样,理想的丰满总是不敌现实的骨感, 然后终于有一天,X被从基因的层面找到了的理论依据和实现方法,于是大家的理想就完美实现了,可以继续梦想下一个X'.
|
评分
-
查看全部评分
|