找回密码
 FreeOZ用户注册
楼主: woodheadz
打印 上一主题 下一主题

[学习深造] 发起了一个Javascript开源MVVM框架

[复制链接]
31#
发表于 1-10-2013 01:53:55 | 只看该作者
本帖最后由 black_zerg 于 1-10-2013 00:55 编辑


我说的是我那个项目的框架,开始的时候被认定能提高生产力最后无论因为什么原因就是个大悲剧。
我对databinding是有很深的成见的,你去搜索 databinding evil这样的词你就会发现不光是我这么说。 这些个mvvm的框架搞了有两三年了吧,我反正看来看去都跟以前模板之类的蛮像的,个人不感冒。
每个人应用场景不同有观点很正常,我已经说我根本就很久不做crud了,我也没有什么专职设计师,所以我的观点都是从我的角度看的。可惜我们观点不同,不然也许可以一起做个开源项目什么的。这个是我做的地图控件 http://glue.atwebpages.com/demo/tutorial.html 其实也没什么用,因为已经有现成的了,就是无聊自己做着玩的
回复  

使用道具 举报

32#
 楼主| 发表于 1-10-2013 02:05:08 | 只看该作者
black_zerg 发表于 1-10-2013 00:53
我说的是我那个项目的框架,开始的时候被认定能提高生产力最后无论因为什么原因就是个大悲剧。
我对da ...

这个就保持不同吧。

地图我也前也搞过,曾经以google地图为基础做了一个sns游戏,买卖地块,互相打仗,可惜最后失败了,血本无归啊...
回复  

使用道具 举报

33#
发表于 1-10-2013 02:10:34 | 只看该作者
我现在准备写一个编辑流程图的东西,again, 也没什么用,就是闲的。 其实现在有一个比较有意思的东西是typescript,流水线开发会是个利器。他的首席设计师是很牛的一个。语言我试了一下,第一印象相当好。
回复  

使用道具 举报

34#
 楼主| 发表于 1-10-2013 02:22:47 | 只看该作者
black_zerg 发表于 1-10-2013 01:10
我现在准备写一个编辑流程图的东西,again, 也没什么用,就是闲的。 其实现在有一个比较有意思的东西是type ...

anders嘛,这个世界上要是单说编译器和语言设计,他排第二估计没人敢排第一。 typescript 从anders第一次在teched上做typescript介绍的时候(好像是去年?)我就一直在跟进。
回复  

使用道具 举报

35#
发表于 1-10-2013 12:15:41 | 只看该作者
本帖最后由 black_zerg 于 1-10-2013 11:42 编辑

OK, i updated my demo to suit designers
http://glue.atwebpages.com/
  1. <div id="listDiv">
  2.         <div>[sex].[name] <hr/> age:[age] ,from:[from]</div>
  3. </div>
  4. <div>
  5.     <div id="formDiv">
  6.                 <label>Name<input name='name'/></label>
  7.                 <label>Sex <select name='sex'>
  8.                         <option>male</option>
  9.                         <option>female</option>
  10.                 </select> </label>
  11.                 <label>Age<input name='age'/></label>
  12.                 <label>From<input name='from'/></label>
  13.         </div>
  14.     <button id="btn_new">New</button>
  15.     <button id="btn_delete">Delete</button>
  16. </div>

  17. JS

  18. var form = new Form('formDiv');   
  19.     var list = new List('listDiv', form);
  20.     list.decorator = function (m) {
  21.         m.sex = m.sex=='female'?'Miss':'Mr';
  22.     };
复制代码
Don't you think this way is easier to understand?  I have 2 classes Form and List here, they basically work on top of HTML elements and adding certain behavior.
call me old fashion I just don't get those MVVM frameworks.

You see the point? the List and Form widgets are very much predictable. They are light-weighted and designed with clear functions instead of forcing developers to follow some 'pattern'
They are tools not rules.
回复  

使用道具 举报

36#
 楼主| 发表于 1-10-2013 14:12:50 | 只看该作者
black_zerg 发表于 1-10-2013 11:15
OK, i updated my demo to suit designers
http://glue.atwebpages.com/Don't you think this way is easi ...


看来我们的确是生活在两个不同世界的人啊...

我有一次面试招人的时候对一个坚定的认为oo是花架子,只有面向过程才是简洁设计的老程序员说过一句话:如果一个技术或者思想很流行,已经被广泛接受,那么在你还没有在这个技术上取得过成功的使用经验之前,最好不要轻易对这个技术做出是或者否的判断。否则很容易就把自己局限在一个小空间里,无法取得突破。 现在再把这话拿出来,大家共勉吧。

回复  

使用道具 举报

37#
发表于 1-10-2013 14:57:57 | 只看该作者
本帖最后由 black_zerg 于 1-10-2013 14:05 编辑

I like to discussion technology, since it is what I am really interested in. I don't see argument is a negative thing, I see it is a chance to learn , but you may not agree with that.  Let's use code to prove our opinions.

I got an idea, let us implement TODO MVC respectively  . How about that?  
回复  

使用道具 举报

38#
 楼主| 发表于 1-10-2013 15:23:47 | 只看该作者
black_zerg 发表于 1-10-2013 13:57
I like to discussion technology, since it is what I am really interested in. I don't see argument is ...

不用比了。我们是两个世界的人。
我会和人讨论天安门广场上的国旗的红色正不正,但我不会去讨论那个国旗颜色是不是绿色的。我看你还真回头去吧前面的demo改了一道,看来你真心认为你的解决方案更好。

对于js ui前端开发所面临的问题,现在人们的工作方式等信息你似乎了解不多(不然也不会犯那么明显的错误),另外在framework方面你似乎也没有成功的使用经验(所以你也许并不能真正体会到framework思想的优势,也不能真正理解framework的问题)。那么你大可不必这么急迫的想要证明你有比我的解决方案更好的解决办法。
Knot.js参考了wpf,knockout.js,angularjs,emberjs等多个框架,这些框架不知道凝聚了多少人心血。knot.js柔和了设计思想中我认为好的部分,加上了些我自己的微创新。也许你依然不能理解为什么这些绑定框架为什么就能比你的做法好?但在你在js 前端和framework方面获得更多的经验之前,不妨观望下,多了解下,不要着急吧这个?号改成!号吧。
回复  

使用道具 举报

39#
发表于 1-10-2013 15:52:01 | 只看该作者
本帖最后由 black_zerg 于 1-10-2013 14:59 编辑

look, it seems like you are very interested in me now. -you just keep expressing your opinions about me. Does that really interest you?

I just don't get it. Don't you think it is a interesting thing to discuss and investigate?  to find out which way is better by deep thinking, instead of the reasons like 'they are so popular' .  If you really feel you are right, and I am wrong, can't you explain your idea calmly?

Well, what ever. That is why Chinese can't work together.  
回复  

使用道具 举报

40#
 楼主| 发表于 1-10-2013 16:00:26 | 只看该作者
本帖最后由 woodheadz 于 1-10-2013 15:04 编辑
black_zerg 发表于 1-10-2013 14:52
look, it seems like you are very interested in me now. -you just keep talking about me, and your opi ...


正相反,我很早就对你不感兴趣,只不过强打精神陪聊罢了(非要我说这么清楚?)。 我的工作经历涵盖四个国家,n个大小差异巨大的团队,一向以协作能力特强而自豪。我在这个帖子里表现出来的惊人的耐心(我自己都有点吃惊)就是证明。

解释可以让别人同意广场上国旗的红色基本还是正的,只不过晒退了点色而已,但不可能让一个人为那是绿色的人同意那颜色其实是红色。
当然,也许那颜色本来就是绿色。但无论如何,这都只能说明我和那人不是一个世界的。
回复  

使用道具 举报

41#
发表于 1-10-2013 16:21:35 | 只看该作者
本帖最后由 black_zerg 于 1-10-2013 15:28 编辑

calm down man, that was uncalled for.
So far only me replied your post. Wasn't it a great opportunity for you to advocate your new framework by proving I am wrong?
I apologize if you think my opinions against those M** frameworks are somehow offensive to you. And now I understand that you don't want to have a deep discussion or do some coding comparisons. All good my friend. Don't make it personal. I don't know you dude. we don't work together and I was just killing my time by playing with code, and kind of hoping you can illustrate me why those M** are helpful.
回复  

使用道具 举报

42#
 楼主| 发表于 1-10-2013 16:47:50 | 只看该作者
black_zerg 发表于 1-10-2013 15:21
calm down man, that was uncalled for.
So far only me replied your post. Wasn't it a great opportun ...


... 我们双方的demo都在这儿了,明摆着的,这就是最好的prove了,还需要prove其它什么?
你想让我告诉你你什么地方错了,对不起,我已经很努力的尝试过了,我承认这在我的能力范围之外。我甚至不太婉转的提醒你,如果对这行不大了解,不妨先学习学习再来讨论“对”和“错”,“好”和“坏”这么大的问题。 看来这个提醒是没效果。
话都说到这个份上了,你再继续就是胡搅蛮缠了。我们俩一定是生活在不同的星球上的,在freeoz的所有议题上,咱们都保持距离吧。不然都是白费口舌。
回复  

使用道具 举报

43#
发表于 1-10-2013 18:54:14 | 只看该作者
I am following this very interesting discussions..Continue  please , you are not alone.
回复  

使用道具 举报

44#
 楼主| 发表于 1-10-2013 19:31:54 | 只看该作者
本帖最后由 woodheadz 于 1-10-2013 19:36 编辑
escctrl 发表于 1-10-2013 17:54
I am following this very interesting discussions..Continue  please , you are not alone.


The last parts are not a discussion. I was crashed by black_zerg, again. Maybe you can save this discussion.
回复  

使用道具 举报

45#
发表于 1-10-2013 22:15:36 | 只看该作者
本帖最后由 black_zerg 于 1-10-2013 21:39 编辑

你说话就和跟基督教的人说话一样,上帝就是存在,怎么你说不存在?书上写的,你读了么?大家都说存在,我这么牛的人都说存在了。基督教那些都还很客气,你则不停的人身攻击 “什么?你说不存在?你弱智吧,你回家读几年圣经再来说话”。
我想大家都有十几年的经验了吧,有必要不停的摆弄你的资格么? 什么mXX的框架多了,遇到被比较,被问框架有什么优点的,我所见到都是认认真真谦虚的回答,人家那些真正的大牛,就职google的也没见像你这么狂妄。就你这样还开源呢。   

一开源框架,连个设计理念也说不清楚,基本框架图也没一个,todoMVC是每个框架必然要实现的东西,在你这里也不当回事。土鸡还觉得自己是个战斗机,只能说呵呵呵。我之前都是一直想认真的讨论下技术问题,对你的跳脚行为也没怎么在意,结果你还来劲了。

有兴趣的可以看一下我们两人的demo。算是这楼唯一有点价值的。我的是看了这个帖子 用手写MVC去实现他的功能,他的是基于他自己的所谓MVVM框架 。我是只看到点databinding, 没看出来MVVM里最重要的VM在那里,这位神仙也不屑说明。
我的主要观点是 html里面大量的markup不好, 维护麻烦。 也就是一个个人观点,为此还特地写了代码来证明Markup未见得比code好写,指望能有点有意思的讨论,也不知道这位跳什么脚。大家互相不认识,犯不上没事辱骂对方吧

http://knotjs.atwebpages.com/
http://glue.atwebpages.com/
回复  

使用道具 举报

46#
 楼主| 发表于 1-10-2013 22:46:35 | 只看该作者
black_zerg 发表于 1-10-2013 21:15
你说话就和跟基督教的人说话一样,上帝就是存在,怎么你说不存在?书上写的,你读了么?大家都说存在,我这 ...

你冤枉我了。我其实一直回答的都很认真...
虽然我后来发现原来你根本就不熟悉这个领域,不只不熟悉js前端,同时你对重用,架构等方面的知识也很贫乏。我一开始还以为你说的真是component,后来才发现就是个class包装了下的东西,毫无重用性可言。  但我还是很注意自己的发帖,对你保持足够的尊重。
直到你让我看你的修改版demo。 我实在忍不住了,很抱歉。
我在freeoz上和人吵架次数不少,你只怕更多些。我们在绝大多数问题上观点相悖,但也争论过很多次了。我发现在所有和你的争论中,我都几乎无法取得任何进展。争论前后你我的观点都没有任何改变。这是绝无仅有的。其它人争论到最后,要不然就是观点越差越远,要不然就是逐渐贴近。而和你永远都是毫无改变。所以在除了技术以外的地方我都是见你就躲,退避三舍。
没想到技术方面也是一样的结果。你的demo我仔细点评过了。为了让你更能理解我的话,我做个比喻:

我做了口切菜刀来给大家看,让大家点评。我期待收获的答案是别人告诉你刀这儿不好用,那里不好用,或者刀太软,不能干这事,不能干那事。

而你老兄直接上来就说我这刀是没用的,太大,你当年用大刀就切了手了。有用的是你那几口小刀。我承认我这刀不小,也承认很多地方刀小才好用。但我也说了,刀大也有刀大的好处,这好处用好了还很不错。
然后你就亮出你的刀了,component。
拜托,你拿出来的是个木头棒子啊,不是刀子,大哥!component是一个关于重用性的概念,component不是class,那是不同的东西!
我点评了,也提醒你了。最后还告诉你,刀子是银色的,不是那木头色。
然后我以为没事了。


最后你亮出了涂成银色的木头。


抱歉,求求你以后像我躲你一样,也躲着我吧。和你扯皮的功夫真的够我喝一壶了。
回复  

使用道具 举报

47#
 楼主| 发表于 1-10-2013 23:02:56 | 只看该作者
本帖最后由 woodheadz 于 1-10-2013 22:04 编辑
woodheadz 发表于 1-10-2013 21:46
你冤枉我了。我其实一直回答的都很认真...
虽然我后来发现原来你根本就不熟悉这个领域,不只不熟悉js前 ...


对了,我为什么管你哪根棒子叫“木头棒子”,而不是铁棒呢,是因为你那个demo明显过度设计了。
不打算重用的东西还花那么多精力去包装,简单的逻辑为了看上去像个mvc而非要拿到个对象里去,面向对象对象不是这么用的啊...  真以为面向对象来了就什么都得放对象里? 你去看看Martin fawler那本关于面向对象设计模式的书,其中最详细的一个例子里,一个对象都没用到。
回复  

使用道具 举报

48#
发表于 2-10-2013 13:22:41 | 只看该作者
本帖最后由 black_zerg 于 2-10-2013 14:51 编辑

http://glue.atwebpages.com/demo/tutorial.html

My implementation of the map widget (similar to openlayers or leaflet). It's my hobby project for killing time. Have a look and let me know if  woodheadz 's comments really make sense:  '根本就不熟悉这个领域,不只不熟悉js前端,同时你对重用,架构等方面的知识也很贫乏'

woodheadz, If you don't mind, stop criticizing me and give some real opinions OK? for example, can you fancy 'MVVM' framework help build a complicated widgets like that? Oh, right, maybe it was only designed to do the simplest CRUD for your little projects?  Then sorry for asking. well done mate.

http://glue.atwebpages.com/chart/index.html
another demo created this week to try functional inheritance.
回复  

使用道具 举报

49#
 楼主| 发表于 2-10-2013 15:50:28 | 只看该作者
本帖最后由 woodheadz 于 2-10-2013 14:54 编辑
black_zerg 发表于 2-10-2013 12:22
http://glue.atwebpages.com/demo/tutorial.html

My implementation of map widget (similar to openlay ...


为什么我觉得无法和你交流?

我你的demo一出来我就在告诉你你demo的问题,代码量大得多(接近我三倍的代码实现了我60%的功能), 可维护性差,还告诉你用你这种做法在团队协作里会有更多的问题,最后顺便指出来你在代码里生成html的做法有多么业余。你demo里最大的两个问题我出于维护你的面子,同时也不想歪楼所以没说:
1.你那不是component。component是面向复用的,你的代码毫无复用性可言。
2.对如此简单的逻辑进行了过度的包装,严重的过度设计。mvc架构能被成功应用的场景只有两个:a.你在使用某种mvc框架,所以你的系统自然是mvc架构的;b.你没使用任何框架,但你的系统表现逻辑十分复杂,所以你自己从头建立了mvc架构。 就这个demo而言,逻辑极其简单,如果你不用框架,那么最好的设计就是简单直白地把功能完成。你那个做法,除了让你的代码看起来像是个“MVC”以外,还能给你带来任何其它好处? 能比简单直白的代码跟容易让人理解?

后来我看你实在是不醒眼,所以这个两个点我也提出来了。

除了做了一个去除动态html的修改版demo(对,这就是那个涂了银色涂料的木头棒子)以外,你对我的这些观点的回应在哪里?  你觉得在你还没搞清楚什么叫component之前你是一个值得与之讨论mvc,mvvm这类更复杂的概念的人吗?

你也许能用js做出复杂的东西来,但不代表你对js前端开发所面临的问题一定就有所了解。你连人们平时是怎样在前端开发过程中使用html都不了解,你还在这儿自称专家要求别人按你的要求讨论前端开发问题?

你自己看看你是怎么参与这贴讨论的:
实话说我看也就那么回事吧,增加GDP而已,不然大家没的事情干

你对别人的不尊重自己不觉得,我对你的尊重和容忍你也视而不见,不把话挑明了你就不懂,挑明了有在这儿抱怨说我不给你real opinions,拜托,我多少的real opinions摆在前面,你除了听懂了“刀子的颜色该是银色”这个最简单的opinion以外,其它的你都忽略了。

这事真怪不得我。你要是进了我的team,我一定会疯掉的。
回复  

使用道具 举报

50#
发表于 2-10-2013 15:56:55 | 只看该作者
本帖最后由 black_zerg 于 2-10-2013 15:11 编辑

代码量大得多(接近我三倍的代码实现了我60%的功能)

how is that ? how big is your 'framework'?  

'你那不是component'  , Why? it has a clear purpose: to bind a form with a list. So the part in *.js  can be reused as Classes, the part I put in html is the code to use the Classes (List & Form).  The idea is , if there is new requirement that List and Form class are not good enough, I will create new class(widget) by extend them,composite or from scratch. Since HTML is just standard HTML, those widgets will work perfectly well with Jquery etc.  Users can pick the right widget for his requirement instead of bound to a 'fancy' magic box.

Well, if no one else is interested, no point to waste my time here. see u

回复  

使用道具 举报

51#
 楼主| 发表于 2-10-2013 16:11:00 | 只看该作者
black_zerg 发表于 2-10-2013 14:56
代码量大得多(接近我三倍的代码实现了我60%的功能)

how is that ? how big is your 'framework'?  


晕死...
“复用”的意思,不是弄出一个东西,可以重复的应用在其它一摸一样的问题上。“复用”的意思,是我弄出一个东西,可以用在这一类的的问题上。
比如demo变成商品信息录入,列表也变成两个有marster,detail关系的列表,你的“复用”还有多少剩下?

然后你居然拿你一个ui界面的代码和我一个framework的代码量比,天哪,我还要被你crash多少遍?

天雷滚滚啊... 你真干了十多年的程序员?
回复  

使用道具 举报

52#
发表于 2-10-2013 16:21:22 | 只看该作者
本帖最后由 black_zerg 于 2-10-2013 15:47 编辑

天雷滚滚啊... woodheadz你真干了十多年的程序员?
天雷滚滚啊... woodheadz你真干了十多年的程序员?
天雷滚滚啊... woodheadz你真干了十多年的程序员?
天雷滚滚啊... woodheadz你真干了十多年的程序员?
天雷滚滚啊... woodheadz你真干了十多年的程序员?
天雷滚滚啊... woodheadz你真干了十多年的程序员?

Don't argue like a girl man. When you have a complicated demo I would like to accept your challenge.

something like this http://glue.atwebpages.com/demo/basic.html


回复  

使用道具 举报

53#
 楼主| 发表于 2-10-2013 16:28:28 | 只看该作者
black_zerg 发表于 2-10-2013 15:21
天雷滚滚啊... woodheadz你真干了十多年的程序员?
天雷滚滚啊... woodheadz你真干了十多年的程序员?
天 ...

if you insist on playing this kind of naughty show in public space, please stay out of my thread,
回复  

使用道具 举报

54#
发表于 2-10-2013 16:45:51 | 只看该作者
woodheadz 发表于 2-10-2013 15:28
if you insist on playing this kind of naughty show in public space, please stay out of my thread,

Just show you how silly your argument is.  What? don't feel comfortable when other people say that to you? Then don't start. I have plenty of free time play with you.
回复  

使用道具 举报

55#
发表于 2-10-2013 17:55:22 | 只看该作者
The topic is getting more interesting!
回复  

使用道具 举报

56#
发表于 2-10-2013 18:32:21 | 只看该作者
很久不上论坛了,不过看到这么个有意思的讨论还是忍不住想来掺和几句。

首先大赞木头猫的热情和干劲,有技术的人很多,有热情的人也有很多,又有技术还有热情,同时愿意坐下来写点东西无偿分享的人真的很少很少。不过根据做了几年开源项目得来的粗浅经验来看,一旦决定做开源公开了自己的作品,就一定要彻底开放自己的心态,程序员一定程度上类似于作家,不过只有做开源的程序员才更像一个真正的作家,这时候,你就会迎来四面发放的评价,或欣赏,或鼓励,不过不管什么项目,即便牛至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'.

评分

参与人数 1威望 +50 收起 理由
black_zerg + 50 精品文章

查看全部评分

回复  

使用道具 举报

57#
 楼主| 发表于 2-10-2013 19:34:40 | 只看该作者
coredump 发表于 2-10-2013 17:32
很久不上论坛了,不过看到这么个有意思的讨论还是忍不住想来掺和几句。

首先大赞木头猫的热情和干劲,有 ...

谢谢老丐捧场。
我发这个贴之前我其实是有一点心理准备的,我等着有人拿knot.js和angular.js,ember.js,knockout.js这些前辈比,找出knot.js的不足,质疑knot.js改进的意义。也等着有人直接告诉我我要干那啥啥啥,你这干不了。甚至也想到有人可能直接从我的源码里揪出这样那样的问题。
没想到最后出现这样的结果,实在是没想到。看来是我修养还不够,连续几个干雷下来就崩溃了。以后加强锻炼,争取脸皮加厚三寸。

虽然没用过,但我看过下QML的相关资料。的确QML的描述方式更容易阅读和编辑,也更便于表达。HTML有历史负担,放弃这种markup的方式只怕是不可能了。
一个比较值得去做的对比是QML和XAML。我不知道XAML是不是anders负责设计的,但我想anders在其中肯定扮演了重要的角色。 anders当年做的delphi的ui描述部分使用的是有点类似QML这种非markup语言的方式(当然没这么强),而WPF却转向了xml为基础,中间的原因我想是不是因为XML有完整的命名空间,定义描述语言(DTD,XSD)的存在?  定义描述语言也就算了,命名空间在XAML里面是非常重要的。不知道QML有没有命名空间的概念?
回复  

使用道具 举报

58#
 楼主| 发表于 2-10-2013 19:55:39 | 只看该作者
coredump 发表于 2-10-2013 17:32
很久不上论坛了,不过看到这么个有意思的讨论还是忍不住想来掺和几句。

首先大赞木头猫的热情和干劲,有 ...

说说knot.js的定位.

作为一个WPF程序员,我实在是讨厌现在这些js绑定框架的做法。该代码干的事,非要放到丑陋的tag里面。最后的结果一是限制大,框架不支持你就没招;二是无关逻辑被迫分散到整个html文档中。
另外让我不能接受的是这些框架都要求在model定义方面遵循他们的规范。这意味着如果我用个框架用到一半觉得不好了,撤出的成本就会变高。我觉得以javascript的动态特性,完全没必要这样。

于是才有的knot.js.  

我一开始考虑过吧knot.js的定义不是放在html的属性里,而是我自己定一个标签,用更容易写的类json(类qml)方式写在标签里,再把标签插入到html元素中间。但尝试了下觉得不方便,markup中间混一对json定义阅读效果也不见得好。于是就做成就是现在这个结果。

knot.js没什么革命性的理念,就是一堆在前人基础上的微创新。但我觉得还是挺值得做这么个东西的。你不知道我终于把knockoutjs从我们的项目里踢掉删除了那些眼中钉的时候有多开心。
这两天加了个binding状态监视器,调试的时候狂好用,我觉得稍作习惯,binding带来的调试上的困难基本上可以通过这个监视器消除。这让我对knot更有信心了

等knot.js基本通过我们这个项目的考验,我就打算去开源社区好好推广下。

我先发到freeoz,是想freeoz毕竟熟人多些,不妨在没成熟的时候发过来先收集下意见。请大家不吝赐教。
回复  

使用道具 举报

59#
发表于 2-10-2013 20:21:41 | 只看该作者
QML最初的原型也是用的XML, 后来放弃了。 XML不是human readable的语言。 QML有namespace的概念。
回复  

使用道具 举报

60#
发表于 2-10-2013 20:25:08 | 只看该作者
黑虫的很多观点也是很有价值的,面对批评不能点菜,我要具体的意见,别来宏观的,切,给你吐槽就不错了,还挑食怎么行,大家都知道挑食会营养不良的。
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 27-10-2024 08:35 , Processed in 0.064026 second(s), 46 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表