代码改变世界

NodeJS的启发--- A-J-A-X 和 MVC相遇?

2011-12-08 02:26  Shawn.Cheng  阅读(1927)  评论(20编辑  收藏  举报

 

首先,我要对这篇文章的题目进行解释一下。

你可能会很吃惊,这篇文章其实和NodeJS没什么关系!没错,我只是看了一篇关于nodejs的文章后,突然灵感涌现,产生了好多想法,到最后捋啊捋啊,竟然和node.js没有任何关系了!

然后是A-J- A- X 其实,我已经发现我的这个想法好像跟ajax很相近,但是呢,由于我对ajax了解不多,不敢保证。但是又牵涉到这个异步的思想,这个名词被ajax占用了,就不得不对这个词进行了改造,用来表述我的异步通信的观点。

还有,MVC,其实我对MVC了解也不深刻,如果中间出现了什么偏差,还望各位大虾多多指点。也是最近才开始看的。

最后,也是很悲剧的一点,很有可能我想的这个东西现在已经很成熟了,或者已经有相应的东西了,只不过我不知道而已。没办法,请容忍一下在学校实验室,对技术涉猎不广的我。各位大牛如果发现已有的东西,千万要告知我啊。

说真的,当我想到这些时,我的内心很激动。决定一定要记下来。

开始正文。

 

晚上的时候,孔孔(http://hi.baidu.com/1024114660/home)给了我一篇关于NodeJs的文章,http://www.infoq.com/cn/articles/why-recommend-nodejs。 看了之后写了以控制台的heloword和web的helloword,这一个万人敬仰的神奇程序。感觉这个node.js太好用了。我倒不是没有感觉它在服务端有多强大的优势。而是感觉这东西比Microsoft的好用啊。一共8M的东西,用个记事本,简单的几行程序,就能完成一件事了。不用安装什么庞大的.net framework ,像我这种菜鸟,可能还对vs这么一个强大的ide产生了强大的依赖感,完了,想写个程序什么得,环境要求太多。突然对微软提供东西的庞大产生点不爽,还有对强大ide产生的无奈,强大的封装,让我很轻松的做出了很多东西,然而我连他怎么运行起来的,都得研究半天。。。。(用了记事本,在加上csc.exe我才明白了点。。o()︿))o 唉)。

再回到node.js上,我看了node.js的异步编程,想了一下,其实,这里边的异步其实在C#里边都可以做到的,只不过C#对那些做了更深层次的概念抽象,写起来代码可能没有node.js那么简洁。然而抽像的好处在于我们处理大型复杂的东西的时候,他能够把问题模型化,简单化,就好比数学一样。有些公理初看就像废话一样,可很多废话严密的组织在一起,就能解决很复杂的问题。

然后我就想到,这个node.js相对于后端的C#,java而言有什么优势啊。。恕我愚钝,除了轻巧和使用js在服务端开发外,我暂时还有更深层次的理解。(应为高并发那些语言也可以做的很好啊)突然想到,这个node.js能够在客户端运行么?如果可以的化,那我们岂不是可以在客户端进行很完美的异步通信?查。。。没查到。看来不行。结果中间还看到了 “保持前端状态”这个词。

啊,客户端异步通信不是XMLHttpRequest么?怎么把这个给忘记了。等等,“异步通信获取数据”,“保持前端状态” , 获取数据 ?面向资源? RESTFul ? url执行资源请求? 那行为怎么办。。 不对,不对。行为。。。Action,哦,Controller,Action, 啊ASP.NET MVC 中的Action,请求一个连接,然后根据这个连接由Controller控制执行某个action,然后,可以返回数据。好像不错。等等,在捋一捋。好乱。

保持前端状态,我们就要在js中执行异步请求,异步请求得到结果,使用js进行客户端数据更行。

Js中的异步请求应该是类似于RestFull中面向资源的思想(当然,Rest提倡按照http原生协议的设计进行请求),发出url请求,然后由服务端截获该请求,执行响应的操作。

服务端的请求截获应该是MVC中的Controller层,首先进行路由,将url请求转交给相应Controller 执行相应的action.执行完毕后,返回响应数据给客户端。

返回的数据由客户端js接受。那么这个通信的数据格式最好的选择就是json。数据完成接收后,js负责将view更新

那么整个项目的形式应该是: 页面全部是html ,UI逻辑是js (UI逻辑负责纯粹的页面数据展示), 服务端的Controller层,全部都是cs(对于C#而言)。没有什么aspx。

用一个图表示大概就是这么个样子。

 

 

 

Html层接受用户的请求后,Html将该请求转交给UIIL层的js进行处理,js根据用户的请求,将该请求以url的形式(请求资源的形式)异步(或许到现在这个话题,异步不异步都不是关键了) 提交给服务器。服务器对URL进行分析路由,将该请求转交个相应的Controler 下的某个Action进行执行。该Action执行完毕后,给客户端返回json形式的数据。客户端UILL层捕获返回结果,js解析得来的数据,然后通知html页面进行更新。

这算不算是一个新的架构模式呢?

如果采用如此架构,完成“保持客户端状态”会十分方便,传输数据量少是很原始的一方面。重要的是让UI 的逻辑层和服务端的交互更加统一化,他们之间的耦合就只有URL,耦合度足够小。然而又由于Controller层的Action完成了和页面很接近的行为,对于UI的测试也是很有利的,当然这是MVC的优点。。。尽管我对他的优点的阐述不专业,但是你不感觉客户端只有html,js,实现动态网站就很神奇么,再也没有aspx,也没有jsp。

好吧,两点了,也该睡觉了。

如果这当中有什么错误,请大家指出。或者是,这个东西已经有人这么干了。。。。泪奔。。

还有,打个广告,如果你看了我的几篇文章,感觉我这么一个将要大四毕业的学生还有点培养前途,而且正好你们公司还要招人,那么请和我联系吧,我会特别感激的。哇。。。找工作啊,好纠结。

我的联系方式是 电话 15037810930 邮箱 cjt0616@hotmail.com QQ 1016890794 求职意向.NET开发  个人简历 http://home.cnblogs.com/job/resume/linecheng/ 简历下载 http://dl.dbank.com/c0bidy3ma6  。可实习。

好了,睡了。明天抽空实现一下,看看怎么样。。

浏览了一下,这篇文章好像已经跑题了。。。真不知道用什么题目好。。。。