根據本身的須要適度使用Web開發框架

軟件系統發展到今天已經很複雜了,特別是服務器端軟件,涉及到的知識,內容,問題太多。Web開發框架可以幫咱們大大減小工做量,可是咱們應該如何正確看待Web開發框架,而且如何去使用他們呢?html

對框架的依賴

從作網站到如今作Web端的應用,我度過了三個時期:前端

1、使用框架來搭建本身須要的系統。一開始是大框架如drupal(這裏我更傾向於稱drupal是框架而不是cms),後來以爲過於笨重。因而改用codeignitor等小框架。程序員

2、再也不徹底使用框架的MVC。而是用框架作服務端數據接口,只提供純數據,由前端進行邏輯處理和渲染。瀏覽器

3、前端從簡單的「分模塊,渲染與邏輯混合」,到「分模塊,面向頁面元素的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

相關文章
相關標籤/搜索