前言:这个文章涉及大量的截图,我估计明早完成不了,特例晚间发布出来!
春天来了,是个花开的季节!其实我对花一无所知,但是我懂得欣赏,无论是含苞待放的嫩绿,还是挂满枝头的梅红,还是落了一地的粉色,都是春天的气息!有时候我就在想,如果世界上只有一种颜色,那么无论这种颜色多么好看,最多也只能算个单调,就像你把屏幕壁纸设置为纯色,它能好看到哪里去呢?
前面很多篇文章谈到程序员应该怎么去思考问题,今天,说到使软件领域更加丰富多彩,我们最需要做的就是把自己的软件公布出来,免费和大家共享,通过使用时收到的反馈,找到软件的不足,以及继续前进的方向!
关于这个话题,我思考了很久,本来想了很多的台词来鼓励大家公布各自的软件,但是终究还是纠结在一句话上:如果我自己都不能带头公布自己的作品,又怎么要求大家这么去做呢?
所以,特意找出了一份我的设计,花了一些时间,在最新的.net 4.5下编译通过,今天先简单演示一下用法,后续会慢慢的讲解其中涉及的方法和原理,还有,我会持续更新这个组件,并结合每个工作日的博文,做同步的探索和讲解。
好吧,这家伙叫CaiShen(可以简称CS),追求极致简化的ajax开发。使用方法如下
1、 新建一个基于.net 4.5的web项目,项目名自定义(比如:WebTest)
2、 引用CaiShen.dll
3、 新建Global.asax文件,写入如下代码
4、 根目录下新建ajax目录,并在ajax目录内新建类文件,写入代码,如:
5、 根目录下建立html文件,写入代码
6、 尝试运行(代码里打了断点为了看x的值)
以上就是我的CaiShen组件,它成功的接收到了后台传来的自定义对象(x=1,y=2),而你需要做的就是引入jquery 和一个虚拟js文件“/jspackage”,然后,在后台写一个类justForTest,类里有个方法test,于是前台js的$A对象里就对应的有justForTest.test方法,关键是:这一切是自动的!也就是在后台写方法,前台自动生成可执行代码。
请原谅我占用了四个全局变量 $A、 $B 、$C 、$D,其中只有$A对你有用,其他都是保留名称。$A是全局入口,任何在ajax目录下的类都会被“编译”为$A的属性,每个类的方法都会被“编译”成对应属性的方法,比如justForTest类和它的test方法,就“编译”成了$A.justForTest.test方法,很容易理解吧!
恩,参数的部分也是自动的,比如上图中的”hehe”这个字符串就被自动“注入”到后台的test方法里,你可以理解为对号入座!
恩,返回值的部分也是自动的,后台只要return一个obj,不管是预定义的还是匿名的,都会被自动包装成js对象,就像上图中的{x:1,y:2}。这里是同步执行的,就好像在调用c#的代码一样,不过除此之外,函数还能异步执行,需要做的就是给方法加入一个回调函数,比如
于是,只要是加了回调函数的表达式就会异步执行,返回的对象会被填入function的第一个参数里!否则,函数就同步执行,是不是很直观呢?
现在后台的那些方法全部被前台搞定了,这就足够了么?答案是否定的,你可能已经注意到了:后台的类或者方法上面有一堆特性,比如JsNoteForClass、JsNoteForMethod、JsNoteForParameter等等,它们的作用就是便于开发时拥有全面的引导。
我们新建一个html文件继续,写入如下代码并运行看效果
注意到我们这回引入的是http://localhost:1928/jsfortest 这个js文件,这个虚拟js文件在你输入$A并打点号的同时,就列出了justForTest这个成员(还有其他自带的成员,如toString,请自动忽略之),把光标移到justForTest上去,会看到一段提示文本“测试用的”,而这段文本正是前面写在JsNoteForClass里面的,你应该懂那些特性标注是干什么的了吧!让我们继续
DBA3BE856B.png" alt="" />
可以看到选择了justForTest之后再打点号,就自动列出了test方法,光标移上去就看到了JsNoteForMethod里面标注的话语,让我们继续
可以看到,选择了test之后,打括号,就出现了参数列表,并且每个参数都标注了JsNoteForParameter里面的话语,仔细看的话,haha参数变成了String_haha ,它告诉我们haha是个字符串类型。
说到这里你可能就已经明白了,”/jspackage”是运行时候用的,”/jsfortest”是开发的时候用的,它提供了完备的智能提示文档,详尽到每个类、每个方法、每个参数、每个类型!
当然了,不仅仅可以有一个类,所有在ajax下的类,都会加入$A,它们被原样“编译”为$A的属性,就这么简单。
需要说明的是,Global文件里,继承了CaiShen组件的 Web.Global类,需要重写preAll方法,有一点很重要的是:一定要执行setInfo(你的项目的命名空间),其实这个方法还有很多重载,比如可以修改ajax目录的名称(默认是”ajax”,这也是为什么要建立ajax目录)。当然了,默认的命名空间是”web”,如果你的项目正好叫这个名字,就不必重写preAll方法了,虽然这几率不大!
我把测试的web项目打包提供下载,你可以试试、看看、玩玩,同时CaiShen.dll也在里面哦!
来吧,have a try!
下载地址:http://files.cnblogs.com/caishen/WebTest2014-03-30-21-10-40.rar