大约十几个月前,了解到时下前端MVC之火爆,同事推荐我了解一下angular。当时也不是特别在意,只是稍稍阅读了一遍官方文档,并尝试了文档上的例子。其实当时也颇有震惊之感的,原来代码还可以这么写!看完之后,很兴奋,也确实想在实际项目中运用一下,但可能我对它的理解不够深入,真到了项目里不知如何下手。后来也就不了了之了。又过了不久,另一个同事推荐我了解一下backbone,我找了一份中文文档来阅读。在当时看来,我更喜欢backbone的代码组织风格,有条不紊,比较好理解。同样也手痒,想要找个实际项目试试手。但由于当时基本都是基于老代码做更新维护,没有实践的机会。于是我的mvc之路便暂时搁浅了。
 
直到2014年3月换到了现在的公司,一切都可以重新来过了。新公司头一件事是进一步研究seajs+spm,之前仅仅是用seajs,没有配合其使用打包工具spm。
 
从2014年3月到4月底,我疯狂地在网上查资料,学习的过程也是很坎坷,官方的文档不够全面,网上的资料还穿插着历史的各种版本,很容易搞混API。由于跟官方的构建方案不大一样,所以官方的教程行不通。后来我甚至直接通过旺旺联系官方支付宝的spm维护人员,好消息是,他点到了其中一个关键配置,使得整个构建行的通,我之前的博客里也有提到他。再之后的一系列摸索,都顺利的多了,非常感谢。后来通过与backbone配合,真正实现了我所设想的构建方案,并发布到了github上。
 
2014年4月底,来了一个电商类的新项目,正好是个机会拿我刚提炼出来的spm构建方案试试手。没有经过实践的东西始终还是会有缺陷的呀,进入到了实际项目,有许多问题就暴露出来了,经过不断的摸索,基本都逐个击破了。
 
电商项目告一段落后,另外一个平台类的项目接踵而至。这个项目的重量级更高,需要更加重视。此时我又开始考虑是否要使用Angular,查了很多资料,想起之前对Angular的了解,有一个阻断我选择它的观点是,“Anagular不能与其他库并存?!”(后来发现这是错误的观点!有可能当时误解了)那岂不是所有组件都要自己写?!但是一方面又对很酷的编程体验很是向往。最终考虑到浏览器兼容,放弃了Angular(对IE8及以下支持不好),选择了Backbone。网上说,其实backbone提供的东西并不多,只是在代码结构组织方面有一定积极的作用。在数据绑定,页面渲染等方面都需要开发者自己搞定。于是在网上找是否有合适的基于backbone的框架可用。后来找到了marionette,跟着教程做了一个页面,发现有各种layout,感觉用起来好累,也许是当初用错了方法。
 
后来想起了arale组件库,当初在支付宝的时候,用过一些组件,感觉蛮方便,而且arale也是以seajs为模块加载器。我把widget进步一包装作为我们的基类按需扩展,派生出了很多常用组件,而backbone仅仅作为业务单元的路由工具使用(想想有点对不起它- -)。在技术选型确定以后,以这套方案开发了几个月后,越发觉得arale的基类很强大,兼具继承,混入和AOP特性,而且代码里发现很多backbone的影子。
 
之后来了一个手机端项目,相对简单。正好大漠的《用AngularJS开发下一代web应用》看的差不多了,想来正好是个实践的机会。试用了一下yo官网的generator-angular,很给力!这次尝试给了我前所未有的编程体验,一个字~爽!
 
generator-angular是一个用于生成angular工程脚手架的工具,包括初始化工程,和在开发过程中新建指定的模块,比如可以根据指定名称生成directive,controller,filter等。另外它还提供了一个完备的gruntfile构建流程,基本能够应对很多项目类型,不过开发者可以根据自己需要进行更改,我就大大小小增删改了很多流程,这个gruntfile对其他项目也具有很大的借鉴意义。
 
之后又有一个之前已经开发好的后台管理系统,我们决定把它用angular重构一遍。这个项目就复杂一些了,不过我还是继续使用generator-angular
 
generator-angular引入的angular模块都是angular官方的,很可能满足不了业务需求,这时候需要我们自己找第三方的模块,或者自己开发组件。我找到了angular-bootstrap作为基本组件库,很好用,而且通过阅读它的源代码,我也了解了很多angular的原理。之后花了一些时间开了form组件和datagrid表格组件,过程确实比较艰难坎坷,指令的确是angular最难的部分。
 
随着此项目的进行,业务需求越来越复杂,form组件和datagrid组件也越来越庞大臃肿,这还可以忍受。我看到controller里一大段一大段的配置对象代码(比如200行的代码,有120行是form组件和datagrid组件的配置代码),着实有些不爽,而且对有些需求真的很难扩展。这是,倒是对当初不用组件开发的方式有点留恋了,优势是思路简单,复杂需求可以较方便的实现。但是手写那么庞大的视图(尤其是form),而且经常是重复或近似的代码也挺无力。于是我终于下定决心想写一个自己的generator,用“代码写代码”,完成乏味的重复劳动,实有一种“返璞归真”的赶脚!
 
花了一个多星期的时间,参照generator-angular,各种踩坑与摸索后,酝酿出了generator-ngstone(以我自己的外号命名- -),算是实现了我之前的想法,尤其是根据配置文件生成form代码与datagrid代码(包括view与controller)。下面这个是我的项目地址:
 
 
欢迎使用,欢迎关注,更欢迎提出宝贵意见!
 
这一路走来,也有一年的时间了,感觉自己还是有一番提升的,这一年没有白过~
未来,HTML5应用会更加火爆,特别是微信SDK的发布,或许应该在这方面下点功夫了。
另外对iOS也是有一番兴趣,尚未深入了解,不知以后的路会怎样。
 
要过年了,给大家拜个早年!新年快乐!

我的前端MVC之路的更多相关文章

  1. 侃侃前端MVC设计模式

    前言 前端的MVC,近几年一直很火,大家也都纷纷讨论着,于是乎,抽空总结一下这个知识点.看了些文章,结合实践略作总结并发表一下自己的看法. 最初接触MVC是后端Java的MVC架构,用一张图来表示之— ...

  2. 一个「学渣」从零开始的Web前端自学之路

    从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的“丰富”. 最后的机缘巧合下,走上了前端开发之路,作为一个非计算机专业且低 ...

  3. 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定

    一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...

  4. 前端MVC框架Backbone 1.1.0源码分析(一)

    前言 如何定义库与框架 前端的辅助工具太多太多了,那么我们是如何定义库与框架? jQuery是目前用的最广的库了,但是整体来讲jQuery目的性很也明确针对“DOM操作”,当然自己写一个原生态方法也能 ...

  5. 【blade的UI设计】理解前端MVC与分层思想

    前言 最近校招要来了,很多大三的同学一定按捺不住心中的焦躁,其中有期待也有彷徨,或许更多的是些许担忧,最近在开始疯狂的复习了吧 这里小钗有几点建议给各位: ① 不要看得太重,关心则乱,太紧张反而表现不 ...

  6. 前端MVC学习总结——AngularJS验证、过滤器

    前端MVC学习总结--AngularJS验证.过滤器 目录 一.验证 二.过滤器 2.1.内置过滤器 2.1.1.在模板中使用过滤器 2.1.2.在脚本中调用过滤函数 2.2.自定义过滤器 三.指令( ...

  7. 前端MVC框架、类库、UI框架选择

    CSS预处理器sass(基于Ruby服务端版)less(客户端版:基于js; 服务端版:基于nodejs) 前端UI框架JqueryMiniUI: http://www.miniui.com/(适用于 ...

  8. 最轻量级的前端Mvc框架backbone

    最轻量级的前端Mvc框架backbone依赖最轻量级的库understore backbone并非将前端再次切分为mvc,而是分为了七大模块,分别是:Events.Model.Collection.R ...

  9. 我的web前端修炼之路从此开始

    看过一篇文章,上面说过要想学习一门新技术,从什么时候开始都是不晚的.但对于一名大四的学生,只会一点简单的网页架构,只懂得HTML,CSS,JavaScript简单的一点皮毛,却怎么也说不过去.但也是这 ...

随机推荐

  1. 20145222黄亚奇《Java程序设计》第8周学习总结

    教材学习内容总结 第15章 通用API 1 日志 1 日志API简介 java.util.loggging包提供了日志功能相关类与接口. 使用日志的起点是Logger类,Logger类的构造函数表示为 ...

  2. 云计算之路-阿里云上:Wireshark抓包分析一个耗时20秒的请求

    这篇博文分享的是我们针对一个耗时20秒的请求,用Wireshark进行抓包分析的过程. 请求的流程是这样的:客户端浏览器 -> SLB(负载均衡) -> ECS(云服务器) -> S ...

  3. 从日常开发说起,浅谈HTTP协议是做什么的。

    引言 HTTP协议作为Web开发的基础一直被大多数人所熟知,不过相信有很多人只知其一不知其二.比如咱们经常用到的session会话机制是如何实现的,可能很多人都说不出来吧.其实session会话就是H ...

  4. 【转】变量的声明和定义,从C到编译原理到C++,再到Java

    基础学了太久,时间一长有些东西就可能记得不太清楚,俗话说得好,"好记性不如烂笔头",所以把基础中的基础-变量的声明和定义,从C到编译原理到C++,再到Java用烂笔头记录下来 最早 ...

  5. 【POJ 1273】Drainage Ditches(网络流)

    一直不明白为什么我的耗时几百毫秒,明明差不多的程序啊,我改来改去还是几百毫秒....一个小时后:明白了,原来把最大值0x3f(77)取0x3f3f3f3f就把时间缩短为16ms了.可是为什么原来那样没 ...

  6. CAS做单点登陆(SSO)——集成BIEE 11g

    BIEE 11G和CAS集成零代码编写,只需配置. 更改BIEE analytics应用的web.xml 将analytics.war解包(使用7-zip或者Win-rar就可以),然后修改WEB-I ...

  7. 【poj1067】 取石子游戏

    http://poj.org/problem?id=1067 (题目链接) 题意 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走 ...

  8. [NOIP2008] 提高组 洛谷P1006 传纸条

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...

  9. 用requests库实现登录遇到的问题

    想登录zhihu,然后总是得到403 foribidden的错误,各种谷歌百度,得到结论说是输入错误或者是url错误,用fldder发现的确是url错了,post的地址是错误的 ==. 开始以为是#s ...

  10. windows上使用image库

    首先要安装这个库,可以使用pip安装,那么我们要首先安装pip 去https://bootstrap.pypa.io/get-pip.py下载get-pip.py,然后运行python get-pip ...