工做那些事儿(10)- 前端

    虽然我一直强调不是前端工程师,但这里仍是要好好说前端的框架,由于这也是我得意的一个做品。 css

    EIP的前端一开始只是单纯地使用jquery。jquery被称为神器不为过,由于真的很好入手,扩展又多,能够实现的效果又好。我之前写过dephi,写过action script,相似这种事件驱动的动态语言再容易上手不过了。可是jquery用得多了,代码开始失控了,一段又一段的事件驱动回调函数,并且很差复用,有不少重复代码,想抽象,发现又凌乱了,总之,代码整体的逻辑结构性不强。若是只是一个jsp实现一些简单特效就没问题,但重前端应用中,这很容易混乱,代码的质量变得低下,可维护性大大下降。 html

    我想找一个帮助我将代码模块化结构化的框架,但必定要轻,要尽可能低的迁入成本。而后找到了backboneJS,那时候backboneJS才0.9.1,什么AngularJS 都还没浦头,能够选择的很少,看到说不少国外网站都用backbone,包括linkined,因而就用了。这家伙,确实是好家伙。他封装了简单的OO方式,无需再用js那拗口的面向对象语法,这让我更好地封装了代码,并使用简单的方式实现继承复用。而backboneJS核心的MVC模式,也很好帮助我将逻辑分层,经过对页面的切割,模块化更清晰。并且它的一个好是,我对原代码的改动并非很大,就实现了迁入,当时代码量大概有4000行JS的样子,一周时间就完成了升级并测试经过。 前端

    网上后来不少在讨论,到底backbone是否是MVC框架,由于它很坏,它的C是Collection,而它并无Controller类,这跟传统意义的MVC相差太大了。但我是这样理解的,其实backbone的View才是MVC里面的C,控制者,在View里实际上是实现逻辑的,而模板引擎+CSS才是真正的V层,这里描述了html布局和样式,是真正的显示层,M层则是Model + Collection。其实,有时候,无须要过多去争论一些字眼上的定义概念问题,关键是,用它带来什么好处,是否知足获得本身的须要,有没有多余的东西。如今backbone就是很能知足个人需求,其余后来的MVC也没见到有特别的东西让我感受须要替换,因此也一直用下来了。 jquery

    还要说说模板引擎,由于一开始在用jquery,因此就用了jquery-template这个官方库,没想到它这么没生命力了,没过多久就宣布再也不升级维护了,NND,而backbone自己建议用underscore的tmpl,但我实在不想所有模板又写一次(二者语法不一致),因此,也一直用jq-template了,这不能不说是一个遗留的痛。 spring

    当时作着个前端,颇有冲劲,想作得极致,参考了不少优化建议,后面还采起了合并代码并压缩的作法,就是将全部js合并到一个js文件,css也合到一个,tmpl文件又合到一个,最后html中要加载的资源除了第三方库,就只有另外三个all.min.js, all.min.css, all.min.tmpl文件,这样下来html合共请求的资源数从50+降到了30+,进一步减轻了http服务器的压力,而因为企业内网网速无压力,因此下载大致积的资源文件,也是很快的。 服务器

    前端另外一个特别的地方就是,我当时想参考spring Ioc的思想,将类的构造放到运行时来决定,实现配置化的策略模式。这是有需求的,不是为作而作。需求源于我想代码更漂亮一点,其实简单的实现就是不断地if else,可是我有必定洁癖,我不想这样if else,因此我想作相似Ioc的东西。JS不是Java,没有class loader,这么搞呢?这个当时花了至关时间去找资料研究,最后的实现方法确很是简单:JS是一个动态语言,原来他自己就具有了这种Ioc的动态性质。简单讲,举个例子,执行一个function,代码中能够写成 前端工程师


myFunc();


来调用,也能够将函数放到一个变量中,而后调用: 框架


myArray = [];
func = 'myFunc';
myArray.push(func);
myArray[func]();


    如此下来,前端基本构建起来了。 jsp

相关文章
相关标签/搜索