<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      重構后端模板文件的一種實踐

      后端的動態模板

      Java后端通常會使用ftl(freemarker template language)模板文件來動態返回前端頁面。這個工作,通常還可以用jspphp文件來實現。但這些動態模板的實現,通常是在已有的html文件上對特定的、需要做動態處理的部分做改寫。這對小項目來講沒什么不對。可如果你的頁面數量足夠多,維護它們將成為一件異常困難的事情。

       

      Nodejs大前端技術

      在目前的大前端技術棧下,Nodejs的各種框架讓前端開發變得規矩不少:傳統前端的html+css+js的技術棧的最大問題在于其模塊化、組織能力像是一個教學語言,應有的語句控制和代碼復用的技術,都顯得蒼白無力。

      就html的編寫來講,幾乎不存在一種類似函數的復用方式,能夠簡化重復的UI component的生成。你只能不斷地去寫一些重復的、雜亂的代碼。整體上來講,這不僅難以做后期的維護,也無法輕易地看懂其間的代碼邏輯。

      一句話來講,這些代碼非常類似于機器代碼或者匯編代碼。沒有高級語言的精準控制和抽象層去對代碼做宏觀把控。

      Pugjs是一個很好的html預處理項目。它的基本想法是:

      不要去直接編寫“底層”的html代碼,而是用自己定義的一套語法去編寫pug文件。通過這個pug文件去生成出html代碼。

      特別地,在它的語法中,你不必再寫一大堆的尖括號和與前后呼應的tag。如同Python,僅僅依靠代碼的對齊方式,就可以自動識別相應的作用域范圍。例如

      <div> 
          <ul>
              <li> First tip </li>
              <li> Second tip </li>
              <li> Third tip </li>
          </ul></div>
      

       

      這樣語義簡單、語法繁瑣的一堆代碼,在pug下可以簡化為

      div
          ul
              li First tip
              li Second tip
              li Third tip
      

        

      但這還不是最誘人的技術,因為這無非是加入了一些語法糖。最為誘人的是pug提供的函數,它能夠定義一個函數去生成某個組件。

      例如,如果你需要定義一組table,每個table僅僅是表頭或者其中一部分的數據不一樣,你該如何處理?傳統的方式當然是復制粘貼一堆模板代碼,然后一個個地去修改里面的數據。

      pug的處理方式就要好太多,完全符合將數據和代碼分離的思想。定義函數:

      mixin leftbox-gen(dataObj)
              table.table
                  thead
                      tr
                          th(scope="col") #{dataObj.title}
                  tbody
                      each area in dataObj.areas
                          tr
                              td
                                  .box-title #{area.name}
                                  ul
                                      each subarea in area.subareas
                                          li
                                              a(id=subarea.id, href=subarea.url) #{subarea.name}
      

        

      這樣就可以根據通過定義json格式的dataObj去引用函數:

      +leftbox-gen(cs_leftbox_data)
      

        

      你通過不同的json數據,就能夠生成不同的table出來。這就實現了代碼的模塊化和以及數據和業務代碼的分離。要做出新的table component,你只需要改變數據就可以了。

      這樣的實現方式在別的高級語言中是很常見的,但是在傳統的前端代碼中,這常常難以見到。原因就在于,html代碼更像是沒有抽象層的機器代碼,只是一大堆的實際操作,而缺少抽象層的高效管理。

       

      前端預處理和后端動態模板的結合

      pug這樣優秀的工具,如果能夠用來管理后端的ftl模板當然會相當合適。優秀的語法糖、代碼模塊化、數據和業務邏輯的分離,實在是相當誘人的選擇。

      但這樣的理念真要實施在生產代碼中,特別是用來重構已有的legacy code時,就不大容易了。

      例如,pug只能生成html代碼,且生成出來的位置通常是在一個統一的地方。可ftl代碼卻分散在各個不同Java工程的不同目錄之下。這兩者很難統一到一起。

      或許一個直接的想法是,不如直接把所有的ftl都放到一個地方,這樣就不用把模板語言分散到各個不同項目的不同文件夾里,而難以維護。

      但這種方案帶來的一個麻煩是,如果真的把后端的ftl文件挪動了位置,那么后端代碼的接口部分就不得不做修改。而這樣的接口部分其數量并不少。既要做出大量的修改,還要保證它們的正確性,并不是一件輕松的事情。

      經過大量的思考和嘗試得出的一個解決方案是:

      使用Pugjs生成出統一的ftl文件,放在同一個公共資源文件夾下。讓每一個具體項目下的ftl文件中,直接include這個公共資源文件夾中ftl內容。

      這種做法的一個精妙之處是:它將ftl文件當作函數接口來使用。后端Java代碼調用ftl文件可以看作是函數調用。而函數實現并不需要直接放在這個ftl文件里,而是可以放在別的地方做引用。這就把實現和調用部分,通過一個單獨的文件分離開了。

      這里雖然處理的是后端模板文件和前端的一個結合,但其思想可以利用在別的地方。如果一個模板文件具備了include功能,便可以把模板文件本身當作接口,從而將實現與定義分離。

       

       

       

       

      近期回顧

      為什么程序員需要知道互聯網行業發展史
      是大家突然變low了嗎?
      至暗時刻

       

       

      如果你喜歡我的文章或分享,請長按下面的二維碼關注我的微信公眾號,謝謝!

       

       

         

      更多信息交流和觀點分享,可加入知識星球:

      posted @ 2018-10-05 13:04  kid551  閱讀(616)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品综合一区二区三区| 成在线人永久免费视频播放| 国产亚洲精品aaaa片app| 亚洲AV无码不卡在线播放| 自拍视频在线观看成人| 无码人妻丰满熟妇啪啪网不卡| 开心激情站一区二区三区| 给我中国免费播放片在线| 通河县| 欧美私人情侣网站| 国产亚洲AV电影院之毛片| 国产精品久久久久久无毒不卡| 中文字幕制服国产精品| 日韩av一区二区精品不卡| 宫西光有码视频中文字幕| 97人妻免费碰视频碰免| 亚洲精品一区二区妖精| 99久久国产精品无码| 成年在线观看免费人视频| 国产精品久久久久久久久久| 国产成人精品无人区一区| 国产资源精品中文字幕| 久久99精品久久久久久青青| 国产桃色在线成免费视频| 久久国产精品二国产人妻| 永久免费AV无码网站大全| 免费无码肉片在线观看| 韩国三级+mp4| 午夜性色一区二区三区不卡视频| 日本丰满白嫩大屁股ass| 成人av专区精品无码国产| 久女女热精品视频在线观看| 亚洲人成亚洲人成在线观看| 女人与牲口性恔配视频免费| 精品女同一区二区三区在线 | 成人啪精品视频网站午夜| 特级做a爰片毛片免费看无码| 狠狠色狠狠色综合久久蜜芽| 通渭县| 成人免费在线播放av| 成人无码潮喷在线观看|