LAFE——基于Layout的前端开发方式简介

标签: Uncategorized | 发表时间:2011-07-18 02:22 | 作者:月影 GFans
出处:http://www.silverna.org/blog

LAFE是个神马东东呢?听起来像个新鲜玩艺儿吧?
要解释这个还蛮费劲的。而我这个人又比较懒,不喜欢长篇大论。(看我前一篇文章是啥时候更新的就知道我有多懒了=.=)
为什么我不经常更新呢,一是我比较懒,二是我一般不喜欢经常码字的,特别是比较忙的时候,如果废话就会被老大发现我工作不饱和,然后说不定就有更多的活要做了……

额……
还是言归正传,谈谈LAFE吧
好吧,我们天天说模块化模块化,但是没有人真正说清楚,一般的开发过程中,如果我们要把前端设计成模块化开发,究竟应该肿么写代码才比较爽。如果只是简单把页面分成一块块的,然后把这些模块一一载入进来,拼成页面,那再简单也不过了。

但是现实没这么理想化,如果一个页面足够复杂,那么可能包含一个头部、一个底部、中间包含一个边拦,一个主栏,主栏里边可能又嵌套包含一个有头、身子、底的复杂结构,然后这种结构还能多重嵌套,这时候你就知道有多烦了。

模块化不仅仅只是拆,更烦的是拼装,如何把一个复杂页面很快速拼装出来呢,好吧,我们看看传统的方式是如何工作滴——

最初的办法是全部写在views下的模板中,例如php有include和require,smarty有include,假如一个a模板要引入b和c,那么就在a中直接写

  1. <?php include('b.php')?>
  2. <?php include('c.php')?>

这种做法当然可以,但是在页面复杂的时候不可取,理由首先是不够灵活,现在我的a页面要套b和c,但是随着需求改变,如果我要新增一个把c换成d的页面,那么得重新写一个模板,写多了很难管理。另外页面模块加载会非常散乱,假如a引入b、c,b引入d、c引入e、f,一个维护网站的开发人员,如果不熟悉这个模块,他要改的东西在e中,得从页面开始找到a,从a找到b、c,从c找到e,才能定位到模板所在,在模块非常多的情况下,这会让维护人员抓狂。另外,联调的时候让写php的工程师拼页面本来就是一件繁琐的工作,而这种简单粗暴的模块拆分方式,无疑加重了他们的麻烦,拼接页面的时候找来找去,相信会让非常多工程师受不了。

那么有没有聪明的做法?当然有,例如,可以事先把模块规划成对象,然后利用php封装,采用搭积木的方式在统一的地方进行拼接,例如——
(以下代码参考某框架,感谢曾经有幸一起共事的几位开发者,感谢某优秀前端开发团队,我以曾经是团队中一员为荣!)

  1. $page = new Page($data);               
  2.     $page->add('header',new xHeader($hd));
  3.     $page->add('search',new xBase($b3search, 'search'));
  4.     $page->add('list',new xBase($show_list, 'list'));
  5.     $page->add('pager',new xBase($pager, 'pager'));
  6.     $page->add('footer',new xFooter());
  7.         $page->extJs('piao/ext/switchcity.js');

我们会看到,这种方式下,有了页面、层和模块的概念,而这些布局、模块和内容,可以在一段php代码中build出来,易于统一管理和维护。而且这种代码方式,对php程序员来说更亲切(这样,在忙的时候,我们就更容易骗他们为我们干活),页面像搭积木一样,这多简单~

不过这也有一些不足之处,首先你必须先约定Header、Footer和其他容器的命名和相互关系,其次,你必须封装和扩展对应的类,第三,在页面比较复杂的时候,比如层嵌套的时候,这种描述也不那么直观,你很难直接看出数据与结构模块之间的关联关系。最后,它并没有想象中的那么灵活,在不额外开发的情况下,你不能随意配置和使用各种Layout结构和模块。

那么,我们有什么解决方案呢?先看下面一段代码——

  1. $layout->{'Header hd'} = $hd;
  2. $layout->{'Header search'} = $b3search;
  3. $layout->{'Body list'} = $showlist;
  4. $layout->{'Body pager'} = $pager;
  5. $layout->{'Footer footer'} = $footer;
  6. $layout->{'Footer extJs'} = $extJs;

这段代码结构简单,它把页面分成Layout容器和模块两个层级,{}之间是结构和模块的描述,模块是可以对应到views下面的module目录的文件,可以设定一个查找目录的规则,例如先找模板当前目录下的module目录,找不到,再去找views下面的module目录,这样就建立起模板管理的层级依赖关系来。=右边是赋给模板的变量,在module中可以用到。这种写法和上面一种写法的不同在于,它不用事先准备对象,所有的模块一律同样对待。它形式上只做简单直观的赋值操作,但定义了一套描述模块位置的语法。它足够灵活,不限制你构建任何模块,它只负责将这些模块找到,拼接到页面中去。它能做到足够灵活,看下面的代码:

  1. $layout->{'Header hd'} = $hd;
  2. $layout->{'Header search'} = $b3search;
  3. $layout->{'Body layer_gride_3_5.Left list'} = $showlist;
  4. $layout->{'Body layer_gride_3_5.Left pager'} = $pager;
  5. $layout->{'Body layer_gride_3_5.Right list'} = $rightside;
  6. $layout->{'Footer footer'} = $footer;
  7. $layout->{'Footer extJs'} = $extJs;

在这里,我们在模板中嵌套了另一层Layout,也就是layer_gride_3_5,它至少有Left和Right两个结构,这样我们就做到了Layout的层级嵌套。
用这套东西还能写出很多好玩的代码来,比如我可以在{}里面用变量,等等等等,还有很多可以想象的事情,这些在下一篇文章里我在详细介绍吧(=.=不过不知道下一篇啥时候更新)

最后,无码无真相,放上代码—— https://github.com/akira-cn/lafe

谢谢观赏~

相关 [lafe layout 前端] 推荐:

LAFE——基于Layout的前端开发方式简介

- GFans - 十年踪迹
而我这个人又比较懒,不喜欢长篇大论. (看我前一篇文章是啥时候更新的就知道我有多懒了=.=). 为什么我不经常更新呢,一是我比较懒,二是我一般不喜欢经常码字的,特别是比较忙的时候,如果废话就会被老大发现我工作不饱和,然后说不定就有更多的活要做了……. 还是言归正传,谈谈LAFE吧. 好吧,我们天天说模块化模块化,但是没有人真正说清楚,一般的开发过程中,如果我们要把前端设计成模块化开发,究竟应该肿么写代码才比较爽.

【Android Training - 02】Improving Layout Performance[Lesson 3-按需载入视图(ViewStub的使用方法)]

- - CSDN博客推荐文章
Loading Views On Demand [按需载入视图]. 某些时候,我们需要一些很复杂的视图却仅仅很少用到. 如果我们在它仅仅需要的时候再载入,这样可以减少内存的使用并且给用户带来流畅的体验. Define a ViewStub [定义ViewStub]. ViewStub是一个轻量级的view,没有占有空间,没有花费draw的资源,也没有参与在任何一个layout里面.

(二)Android性能优化系列---Improving Layout Performance(一)(转载自:http://xhmj12.iteye.com/blog/2064258) - 小菜美妞成长中

- - 博客园_首页
Android性能优化系列---Improving Layout Performance(一).         Layouts是Android应用里直接影响用户体验的一个关键部分. 如果Layout设计的不好,可能导致你的应用大量的内存占用从而导致UI响应很慢. Android SDK提供了工具帮助你分析你的Layouts的性能问题.

前端技术

- - CSDN博客综合推荐文章
随着互联网产业的爆炸式增长,与之伴生的Web前端技术也在历经洗礼和蜕变. 尤其是近几年随着移动终端的发展,越来越多的人开始投身或转行至新领域,这更为当今的IT产业注入了新的活力. 尽管Web前端技术诞生至今时日并不长,但随着Web技术的逐渐深入,今后将会在以下几方面发力. JavaScript的兄弟们.

Web前端优化

- - JavaScript - Web前端 - ITeye博客
优点:直接使用浏览器内存的缓存数据,减少网站后台压力,用户体验(速度)好. 缺点:对于时时变化的动态页面,这种情况就不能容忍了,因为每次访问的都是第一次访问的内容,这样即使所请求的页面已经变化了,用户也不可能知道,所以此场景必须要消除这种缓存的影响. 延迟加载,将资源延迟到需要的时候的加载,例如detail页面,相关产品推荐,当用户浏览更多的信息往下拉动滚动时,才进行加载,异步加载可以大幅减少对后端资源的使用,在需要的时候加载,是资源合理使用常用的方式,但是也带来一个问题,当往下拉才去加载,如果性能不够好,用户的体验其实是不好的,“菊花”转动的时间会比较长,同时异步加载对前端性能的作用也是非常明显的,渲染的节点数量大幅减少.

Web 前端测试

- - Web前端 - ITeye博客
Web 网站测试流程和方法(转载). 进行正式测试之前,应先确定如何开展测试,不可盲目的测试. 一般网站的测试,应按以下流程来进行:. 1)使用HTML Link Validator将网站中的错误链接找出来;. 2)测试的顺序为:自顶向下、从左到右;. 3)查看页面title是否正确. (不只首页,所有页面都要查看);.

前端xss攻击

- - SegmentFault 最新的文章
实习的时候在项目中有接触过关于xss攻击的内容,并且使用了项目组中推荐的一些常用的防xss攻击的方法对项目进行了防攻击的完善. 但一直没有时间深入了解这东西,在此,做一个简单的梳理. xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入的恶意html代码会被执行,从而达到恶意用户的特殊目的.

初识前端模板

- slackware - 百度泛用户体验
“模板”这个词,可能很多人第一印象是后端的技术(Smarty,Velocity等),但本文要讲的却不是后端的概念,而是前端开发中所使用到的一种技术,也就是“前端模板”技术. 模板的工作原理可以简单地分成两个步骤:模板解析(翻译)和数据渲染. 这两个步骤可分别部署在前端或后端来执行. 如果都放在后端执行,则是像Smarty这样的后端模板,而如果都放在前端来执行,则是我们要探讨的前端模板.

前端的横向发展

- Oasis - 崔凯,前端开发
今天的交流会上,提到了“横向发展”这个词,意指推荐大家学习与前端打交道的相关技术,如:php. 其实“前端”这个词,是2005年才逐渐在国内兴起的. 那之前,国内的网站,通常是TABLE+ASP搞定一切. 做这份工作的人,通称“程序员”. 那是个孤军奋战就能赢得天下的年代. 一个网站丢过来,一个人就全拿了:“写需求==>出设计稿==>做模板==>写程序==>运营.

前端神器 Sublime Text 2

- - 博客园_首页
  博主之前一直用notepdd++写前端代码,用得也挺顺手了,早就听说sublime的大名,一直也懒得去试试看,认为都是工具用着顺手就好. 这几天突然心血来潮,下了个试了下,结果. 结果博主毫无节操的抛弃了notepad++. 下面根据博主这几天的使用心得,来介绍下这款前端神器,介于使用时间很短,有些说的不妥的地方还望各位看官海涵.