何も保存する必要のないサービスを作成しています。それはいくつかの値を取得します。データベースでいくつかのことを調べてから、応答を咳打つ。サービスをより高速にする/オーバーヘッドを減らすために何かすべきことはありますか?また、何かを渡すための最良の方法は何ですか?私は通常、IDを渡してもう一度それを取得します。それは良い/悪い/愚かなのですか?Grails - ドメインオブジェクトを渡してサービスを利用する方法
例
class DoStuffController {
def ExampleProcessingService
def yesDoIt = {
def lookup = "findme"
def theObject = ExampleThing.findByLookie(lookup)
def lolMap = ExampleProcessingService.doYourThing(theObject.id)
if(lolMap["successBool"]){
theObject.imaString = "Stuff"
theObject.save()
}
[]
}
}
サービス
class ExampleProcessingService{
static transactional = true //???????? false? not-a?
def doYourThing = {theID ->
def returnMap = [:]
def myInstance = ExampleThing.get(theID)
if(myInstance.something)returnMap.put "successBool", true
else returnMap.put "successBool", false
return returnMap
}
}
ドメインオブジェクト
class ExampleThing {
String imaString
String lookie
static constraints = {
imaString(nullable:true)
}
def getSomething() {
return true
}
}
ブートストラップ
import learngrails.*
class BootStrap {
def init = { servletContext ->
def newThing = new ExampleThing(lookie:"findme")
newThing.save()
}
def destroy = {
}
}
IDを渡してオブジェクトを取得したり取得したりする利点、不利または標準ですか?サービスに何も保存しないというケースを考えれば、これは変わるのでしょうか?私は間違ったことをしていますか?あなたはそのタイトルのより良い提案をしていますか?
私は@ burt-beckwithに同意し、ドメインIDをサービスに渡す理由はない、ということを追加したいだけですあなたがそうしないと本当に良い理由がない限り、私はオブジェクト自体を渡すでしょう。 – sbglasius
スレッドが死んでいるように見えるので、この回答は役に立ちました。 – Mikey
ありがとうございました!私は、サービスにおけるクロージャの非トランザクション動作を再現しようとしました。しかし、できませんでした。私がテストしたサンプルコードはhttp://pastebin.com/9L4jzMp3にあります。どんな助けもありがとう。 –