zoukankan      html  css  js  c++  java
  • 根据自己的需要适度使用Web开发框架

    软件系统发展到今天已经很复杂了,特别是服务器端软件,涉及到的知识,内容,问题太多。Web开发框架能够帮我们大大减少工作量,但是我们应该如何正确看待Web开发框架,并且如何去使用他们呢?

    对框架的依赖

    从做网站到现在做Web端的应用,我度过了三个时期:

    一、使用框架来搭建自己需要的系统。一开始是大框架如drupal(这里我更倾向于称drupal是框架而不是cms),后来觉得过于笨重。于是改用codeignitor等小框架。

    二、不再完全使用框架的MVC。而是用框架做服务端数据接口,只提供纯数据,由前端进行逻辑处理和渲染。

    三、前端从简单的“分模块,渲染与逻辑混合”,到“分模块,面向页面元素的MVC”,再到“分模块,事件驱动的,面向切面的MVC”(稍后详述)。

    为什么会有这三个时期的转变,实际上很大程度是由我对开发过程的希望驱使的。这些希望是这样的:

    1. 当需求确定好以后,首先我希望在前后台单独开发,只要约定好数据接口就行,这样如果有人来帮我,可以很快的互不打扰地进行。而且可以很灵活的各自用虚拟数据测试。
    2. 当我开发前端时,我想要渲染和逻辑完全分离,这样我就可以写逻辑的时候专心于逻辑。保持代码整洁。最重要的是随便页面怎么改,只要业务大体不变,逻辑就可以写好了不用再管。这就引进了前端MVC,实际上就是简单的数据集和渲染的关系。
    3. 我希望逻辑事件的触发是由页面来决定的,并且怎么变都不用再动写好的逻辑层(本质意义上的不动,连文件都不用打开)。这就引入了事件驱动,逻辑层只用监听感兴趣的事件(包括和服务器端的通信也可以用事件驱动),只用触发自己完成后的事件,什么都不用管。渲染层也是如此。
    4. 我希望页面的事件如click, dblclick等能和逻辑事件分离,最好我在这些元素上指定一个特定的属性,它就能给我自动转换并去触发逻辑事件。这样我写js的时候就只用管特效就够了。这就引入了页面事件代理(详见关于ace-engine)。这样可以随便采用什么页面模板就没关系。

    以上四点的希望就是我目前开发的理想状态,重点是“简单、重用”,这里的重用实际上指的是“容易加新功能”,“容易应对需求修改”,“容易找bug”。心有余力的话才是“下次还能用”。我想这也是很多和我同样的程序员所迫切需求的吧,虽然我觉得这个层次很低啊,哈哈。下面简单讲如何实现。

    1. 前后分离很容易,做好约定就行了。
    2. 前端mvc可以采用backbone,也可以采用简单的数据集和模板来做。
    3. 对于spa来说,通过定义一个全局事件,各个模块用自己的模块名作命名空间就行了。建议全部事件都通过这个全局的来驱动。使用了backbone的话,不建议直接使用backbone的模型的事件。
    4. 建议采用ace-engine的ace-template,也可以自己写。

    ace-engine

    ace-engine是百度的王集鹄开发的。我用了一下ace-event和ace-template。非常好用,这里介绍一下。

    ace-event实际上是一个浏览器事件的代理。

    我们首先来看一个简单例子。你的页面上有一个登陆按钮,按下去以后按钮演示要变,同时弹出登陆对话框。还有一个普通的链接,不需要变化样式,点击同样要出现对话框。我们在实现功能的时候可能会这样做:

    1. 声明弹出对话框的函数。
    2. 给按钮的绑定click事件,先改变样式,再调用对话框函数。
    3. 阻止链接的默认行为,调用对话框函数。

    这种做法的缺点是:

    • 逻辑与样式混合,当页面效果复杂了以后代码会混乱。
    • 页面元素如果出现id之类用作选择器的属性变化,代码也需要变动。当新增时,代码中也需要再次绑定。

    ace-event能做的就是将显示与业务逻辑分离。具体的方法如下:(以下步骤中的Event对象并不是ace-event的一部分,需要自己另外实现。)

    1. 约定好整个系统中的事件名称,通过一个全局的Event对象来注册和触发事件,各个模块之间监听自己的感兴趣的事件。如用户模块监听login事件。并执行回调。

    1 Event.on("login", module_user.login);

    2.在页面元素上使用"cmd='login'"来表示点击会要触发的事件。

    3.在表示层中使用ace-event来监听cmd指向的事件,进行页面的渲染,然后再抛出逻辑层事件。如

    1 AceEvent.on(selector_id, function(command, target){
    2     //这里的target就是被点击的元素
    3     //command就是该元素上绑定的命令
    4  
    5     //在这里进行页面的渲染
    6     //同时抛出逻辑层事件,如:
    7     Event.fire("login");
    8 });

    这种做法相对于backbone等大的mvc来说优点在于简洁,性能高。ace-template就不详述了,相对于其他前端模板它的有点在于js和html可以随意混合编写,不需要类似于"<%"的语法分隔符。很强大。


    http://www.cnblogs.com/dekins/archive/2012/03/27/2418886.html

  • 相关阅读:
    JavaScript中的闭包
    SQL 备忘
    SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
    unable to start debugging on the web server iis does not list an application that matches the launched url
    Freebsd 编译内核
    Freebsd 6.2中关于无线网络的设定
    【Oracle】ORA01219
    【Linux】Windows到Linux的文件复制
    【Web】jar命令行生成jar包
    【Linux】CIFS挂载Windows共享
  • 原文地址:https://www.cnblogs.com/MRPUNK/p/3876209.html
Copyright © 2011-2022 走看看