日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

本文的建議主要針對(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類(lèi)的邏輯, 請(qǐng)使用標(biāo)準(zhǔn)的命名約定 "<DomainClass>Controller". 

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

    4. 將復(fù)雜的數(shù)據(jù)綁定拆成 common object. 你也可以編寫(xiě)富 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, 與外部依賴(lài)較少的邏輯都可放入. 但是確保邏輯只針對(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目錄中混入普通的工具類(lèi)或值對(duì)象, 把它們放到src/groovy目錄中. 如果這些類(lèi)需要支持?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類(lèi)中, 根據(jù)需要收集或格式數(shù)據(jù)顯示. 但還是要遵循domain類(lèi)最小依賴(lài)原則.

    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類(lèi). 既然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)買(mǎi)等信息,謹(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)論公約

    類(lèi)似文章 更多