發(fā)布于:2021-01-16 11:06:16
0
165
0
對Grails的大多數(shù)介紹都側(cè)重于在新的數(shù)據(jù)庫模式之上快速構(gòu)建新的web應(yīng)用程序。域的建模(映射到數(shù)據(jù)庫表的類)和構(gòu)建的HTML用戶界面都使它非常容易開始。但除了快速啟動,它還能提供什么呢?在Java企業(yè)中,這是一個嚴(yán)肅的選擇嗎?對此的回答是肯定的,我將帶您了解框架的一些特性,這些特性使它適合這種環(huán)境。
創(chuàng)建域模型時,您希望能夠通過用戶界面與之交互,添加、更改和刪除數(shù)據(jù)。這就是腳手架所提供的。給定一個域類,例如:
class Book {
String title
String author
static constraints = {
title blank: false
author blank: false
}
只需添加具有scaffold static屬性的匹配控制器類,即可生成CRUD web用戶界面:
class BookController {
static scaffold = Book
}
當(dāng)應(yīng)用程序運(yùn)行時,您可以通過一組標(biāo)準(zhǔn)的url來創(chuàng)建、查看、修改和刪除Book的實例。
很少有真正的web應(yīng)用程序是基于腳手架的,那么它真正提供了什么價值呢?只是個噱頭嗎?一點也不。不要低估快速高效地啟動和運(yùn)行一個正常工作的應(yīng)用程序的價值。除此之外,腳手架在一些場景中也有很大的價值。
在為web應(yīng)用程序構(gòu)建最終用戶界面的過程中,有許多情況下,您需要與數(shù)據(jù)進(jìn)行充分的交互,特別是測試正在使用的某些功能。如果您啟用了框架式UI,那么您就可以在瀏覽器中與數(shù)據(jù)進(jìn)行交互。對于一個典型的開發(fā)人員來說,這比處理數(shù)據(jù)庫客戶機(jī)工具和SQL腳本更有效率。
一旦初始應(yīng)用程序準(zhǔn)備就緒,就很容易禁用腳手架,所以不會因為腳手架頁面而污染您可愛的用戶界面。或者,考慮第二種情況。
在應(yīng)用程序或網(wǎng)站上線后,您有多少次希望修復(fù)某些數(shù)據(jù)?通常web應(yīng)用程序不允許您這樣做,因此您可能必須發(fā)布新版本或(恐怖?。┲苯釉跀?shù)據(jù)庫中修改數(shù)據(jù)。有一個安全的管理員用戶界面,讓您可以完全訪問域模型,這不是更好嗎?
您可以使用類似Spring安全性插件的東西來保護(hù)腳手架控制器,所以為什么不保留它們并確保只有管理員可以訪問這些頁面呢?如果你不能通過主UI做你需要做的事情,它是一個理想的回退選項。
如果你有50個或100個甚至更多的域類呢?為所有這些創(chuàng)建一個web應(yīng)用程序需要大量的工作。腳手架在這里很有幫助,可以成為整個應(yīng)用程序的基礎(chǔ)。您不局限于標(biāo)準(zhǔn)的外觀:scaffolding使用您可以隨時定制的模板。只需更改CSS或替換整個HTML,甚至可以選擇使用JavaScript庫。這取決于你。
說到大型域模型,如果您手工創(chuàng)建,那么首先創(chuàng)建這些模型可能會非常耗時。幸運(yùn)的是,你在這里有一些選擇。
GORM(Grails對象關(guān)系映射)的默認(rèn)實現(xiàn)是基于Hibernate的,這允許使用一些有趣的技術(shù)。例如,許多Java企業(yè)都有基于Hibernate或JPA的現(xiàn)有域模型。為什么他們會接受任何使用替代語法重新創(chuàng)建模型的要求?聽起來像是不必要的努力。
幸運(yùn)的是,Grails可以使用現(xiàn)有的模型,只要它有xmlhibernate映射或者使用JPA注釋。關(guān)于如何做到這一點的詳細(xì)信息可以在別處找到,但基本上您可以將模型作為Java源代碼或JAR包含在Grails項目中;創(chuàng)建Hibernate配置文件;并在單獨的文件中添加GORM約束。然后您就可以完全訪問Grails提供的所有優(yōu)秀特性,比如動態(tài)查找器、Where查詢、“errors”屬性等。
如果你沒有一個現(xiàn)有的模型或者你真的想要一個成熟的標(biāo)準(zhǔn)GORM模型呢?對于這種情況,我們有反向工程插件,它將從現(xiàn)有的數(shù)據(jù)庫模式生成一個GORM模型。這不是一個靈丹妙藥-模型無疑將需要調(diào)整-但它可以節(jié)省你很多時間,如果你有許多數(shù)據(jù)庫表。定制現(xiàn)有文件要比從頭創(chuàng)建文件容易得多。
這樣的域模型可以為單個web應(yīng)用程序創(chuàng)建,但在企業(yè)中,同樣的數(shù)據(jù)庫和模式也可能被多個應(yīng)用程序使用。如果您可以將模型及其約束打包,或者添加一些粗粒度的服務(wù)以使其更方便使用,那就太好了。
Java中打包的標(biāo)準(zhǔn)單位是JAR。這些當(dāng)然也可以被Grails使用,但是一個簡單的類集合忽略了Grails提供的豐富約定和工件類型。例如,Grails如何知道某個特定類是標(biāo)記庫還是控制器?
這就是插件的用武之地。在最基本的層次上,它們按工件類型打包功能,以便您可以在多個應(yīng)用程序之間共享該功能。一旦插件安裝在應(yīng)用程序中,它的所有域類、服務(wù)、標(biāo)記庫等都可用,就好像應(yīng)用程序自己定義了它們一樣。
想象一下,將一個插件放到應(yīng)用程序中,并能夠立即使用定義良好的服務(wù)與現(xiàn)有數(shù)據(jù)庫進(jìn)行交互。該插件甚至可能包含用于查看域模型部分的標(biāo)準(zhǔn)UI元素—只需從您自己的視圖中使用它們。插件機(jī)制不僅僅是為了提供Spring安全集成或MongoDB支持。它還可以幫助您將應(yīng)用程序分解為靈活、可重用的部分。插件的一個優(yōu)點是它們就像Grails應(yīng)用程序一樣,所以您甚至不必學(xué)習(xí)任何新的東西來使用它們。
Grails背后的一個關(guān)鍵原則是使Java開發(fā)人員能夠輕松地創(chuàng)建web應(yīng)用程序,同時提供與現(xiàn)有系統(tǒng)集成的靈活性。GORM以一種方式體現(xiàn)了這一原則,即您可以與現(xiàn)有的領(lǐng)域模型集成,而不必犧牲動態(tài)查找器的便利性,在動態(tài)查找器中,查詢和腳手架可以被使用
我只觸及了表面。例如,您可以對NoSQL存儲使用相同的gormapi,使它們可以立即訪問。但是,當(dāng)您需要訪問它們的特殊功能時,您可以隨時訪問它們的本機(jī)接口。在GORM之外,Grails是基于Spring構(gòu)建的,如果需要的話,它允許您使用該框架的全部功能
Grails是在Java企業(yè)中構(gòu)建web應(yīng)用程序的一種很好的方法,您可以開始使用它進(jìn)行快速原型設(shè)計。您需要的工具和集成點就在那里,然后您就可以在探索插件生態(tài)系統(tǒng)時獲得一些樂趣,比如簡單的訪問控制、作業(yè)調(diào)度等等!