乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      grails最佳實(shí)踐

       richsky 2012-05-15

      grails最佳實(shí)踐

      大東哥 發(fā)表于 4-10 19:17 1個(gè)月前, 6回/1628閱, 最后回答: 1個(gè)月前 ( 23人收藏此話題, 我要收藏 |舉報(bào))
      1

      我工作于IntelliGrape, 一個(gè)專用Groovy&Grails開(kāi)發(fā)項(xiàng)目的公司. 本文列舉了我們Grails項(xiàng)目遵循的幾個(gè)基本的最佳實(shí)踐, 它們通過(guò)郵件, Stack Overflow, 博客, podcasts, 和公司內(nèi)部的討論收集. 按照controller, service, domain, views, taglibs, 測(cè)試和其它分類.

      本文的建議主要針對(duì)Grails 2.0.

      Controller

          1. 不要讓Controller扮演多個(gè)角色. 控制器的角色僅僅是接收請(qǐng)求, 檢查權(quán)限等, 復(fù)雜邏輯由domain或service處理, 并根據(jù)期望的格式返回HTML,XML,JSON等. 盡量保持控制器簡(jiǎn)單. 不要在控制器中處理復(fù)雜業(yè)務(wù)邏輯, 查詢, 更新等.

          2. 如果控制器只是關(guān)于某個(gè)domain類的邏輯, 請(qǐng)使用標(biāo)準(zhǔn)的命名約定 "<DomainClass>Controller". 

          3. 避免代碼重復(fù) - 將重復(fù)編碼封裝成閉包. 查看這里獲取更多信息.

          4. 將復(fù)雜的數(shù)據(jù)綁定拆成 common object. 你也可以編寫富 common object. 建立 common object 的繼承結(jié)構(gòu)有時(shí)會(huì)很有用.

      Service

          1. service是處理復(fù)雜業(yè)務(wù)邏輯的正確地方. 如有需要, service可以很容易的暴露為RESTful/SOAP服務(wù).

          2. service默認(rèn)開(kāi)啟事務(wù), 若無(wú)持久化操作, 也可以設(shè)置成非事務(wù)的.

      Views

          1. 盡量保持views簡(jiǎn)單 -- 避免在模版中處理復(fù)雜業(yè)務(wù)邏輯

          2. 使用布局模版, 子模版保證外觀風(fēng)格一致.

          3. 讓模版遵循DRY原則. 把重復(fù)的東西封裝成模版.

          4. 使用自定義標(biāo)簽, 封裝通用的UI元素

      Domain

          1. 處理 domain 自身業(yè)務(wù)邏輯的好地方. 任何適用于單個(gè)domain, 與外部依賴較少的邏輯都可放入. 但是確保邏輯只針對(duì)domain本身 -- 更復(fù)雜的需要多個(gè)domain協(xié)作的業(yè)務(wù)邏輯應(yīng)方到service中.

          2. 重用業(yè)務(wù)邏輯或拆分復(fù)雜業(yè)務(wù)邏輯, 使用命名查詢并以鏈?zhǔn)浇M合, 就像jQuery的函數(shù)鏈?zhǔn)秸{(diào)用一樣.

          3. 不要在domain目錄中混入普通的工具類或值對(duì)象, 把它們放到src/groovy目錄中. 如果這些類需要支持?jǐn)?shù)據(jù)驗(yàn)證, 可以使用@Validateable注解.

          4. 為domain對(duì)象使用顯示的構(gòu)造函數(shù), 避免無(wú)效的狀態(tài)而僅構(gòu)造有效的對(duì)象.

      Taglib 標(biāo)簽庫(kù)

          1. 確保每個(gè)標(biāo)簽輕量. 標(biāo)簽可以調(diào)用其它標(biāo)簽, 最好將標(biāo)簽拆成幾個(gè)可重用的子標(biāo)簽. 

          2. 標(biāo)簽庫(kù)被認(rèn)為是MVC結(jié)構(gòu)中view的一部分, 但也可以放入domain類中, 根據(jù)需要收集或格式數(shù)據(jù)顯示. 但還是要遵循domain類最小依賴原則.

          3. 它應(yīng)包含比渲染更多的邏輯; 盡管少量的渲染是好的.

          4. 使用多個(gè)自定義標(biāo)簽更好的組織頁(yè)面

      測(cè)試

          1. 單元測(cè)試優(yōu)于集成測(cè)試, 運(yùn)行和更快. 一個(gè)例外是, 測(cè)試service, 集成測(cè)試的信息會(huì)更有用.

          2. 在單元測(cè)試中, 使用 save(validate:false)保存未完整加載的對(duì)象.

      Config.groovy

          1. 所有的環(huán)境參數(shù)在Config.groovy指定, 如serverURL,環(huán)境相關(guān)的常量,等等.

          2. 將個(gè)性化配置(如本地的數(shù)據(jù)庫(kù)用戶名,密碼)放到單獨(dú)的<Local>Config.groovy文件中, 并加入版本管理工具忽略列表中,這樣團(tuán)隊(duì)中的成員的個(gè)性設(shè)置不會(huì)相互影響.

          3. 可能有些爭(zhēng)議, 但我們還是建議設(shè)置 grails.gorm.failOnError = true, 這樣當(dāng)保存對(duì)象發(fā)生驗(yàn)證錯(cuò)誤時(shí), 異??梢粤⒓磼伋? 這樣的話, 你就不需要檢查保存是否成功了.

          4. 在 Grails 2.0 中, 默認(rèn) “grails.hibernate.cache.queries = true", 這樣查詢緩存自動(dòng)生效, 而不用添加 cache:true. 把值設(shè)為false, 僅在需要的時(shí)候使用緩存.

      其它建議

          1. 理解并堅(jiān)持Grails約定, 因?yàn)镚rails是基于約定驅(qū)動(dòng)的. 使用這些約定能讓開(kāi)發(fā)更輕松.

          2. 為了組織Grails工件, 不要這么做 com.businessname.appname.domain 和 com.businessname.appname.controller. 否則在FooController中, 我們不得不最終導(dǎo)入Foo類. 既然Grails已經(jīng)將這些工件放到指定的目錄中, 它們就不需要再被拆分. 查看blog.

          3. fixtures 插件可以幫助你在開(kāi)發(fā)環(huán)境中初始化數(shù)據(jù).

          4. 將應(yīng)用的可重用部分做成插件. 這些插件可以單獨(dú)的測(cè)試和隨時(shí)從主項(xiàng)目中移除. 如果你認(rèn)為該插件對(duì)其它開(kāi)發(fā)者有幫助, 也可以發(fā)布到公共的插件倉(cāng)庫(kù)中.

          5. 修改腳手架模塊生成工件, 定制自己的頁(yè)面和控制器生成策略.

          6. 寧可用動(dòng)態(tài) scaffolding 而不選靜態(tài)scaffolding, 直到行為不能再滿足你的需要. 例如, 僅僅是 "save" 操作需要修改, 你就僅需覆蓋 "save" 操作, 而其它操作代碼還是可以在運(yùn)行時(shí)動(dòng)態(tài)生成.

          7. 最好在DataSource.groovy中提供 re-connection properties 配置.

          8. 確??偸前獠颗渲梦募?甚至是空文件), 這樣可以在生產(chǎn)環(huán)境中覆蓋原有配置選項(xiàng)而不用重新打包.

          9. 如果需要對(duì)使用的插件做少量修改, 如修改quartz monitor的list.gsp文件, 你可以不用直接修改插件里的文件, 而是重新定義一個(gè)相同的目錄和包來(lái)覆蓋. 它比插件的優(yōu)先級(jí)高.

          10. 所有domain的自定義驗(yàn)證器可以放到單獨(dú)的文件中, 這樣可以提高重用度, 其它domain有需要也可使用. 這里有個(gè)例子.

          11. 應(yīng)用要安裝插件, 最好在BuildConfig.groovy中定義, 而不是使用install-plugin命令. 查看該貼獲取詳細(xì)信息.

          

       英文原文  OSCHINA原創(chuàng)翻譯

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多