Я пишу службу, которая не должна ничего сохранять. Он получает некоторые значения. Выбирает несколько вещей в базе данных и затем отбрасывает ответ. Есть ли что-нибудь, что я должен сделать, чтобы сделать сервис быстрее/меньше накладных расходов? И что является лучшим способом передать ему что-то. Я обычно передаю идентификатор и получаю его снова; что это хорошо/плохо/немодно?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 = {
}
}
Является ли преимуществом, недостатком или стандартом для передачи идентификатора и получения доступа к передаче объекта? Изменилось ли это изменение, когда я не собирался ничего спасти в сервисе? Есть ли что-то, что я делаю нелепо? У вас есть лучшее предложение для названия?
Я согласен с @ burt-beckwith и хочу добавить, что нет причин передавать идентификатор домена службе, просто чтобы сделать другой поиск вашего объекта, я бы передал сам объект, если у вас нет действительно веской причины не делать этого. – sbglasius
Я принимаю это, поскольку поток, кажется, умер, и этот ответ действительно помог. – Mikey
Спасибо, бур! Я попытался воспроизвести не-транзакционное поведение для закрытия сервисов. Но не мог. Пример кода, который я тестировал, можно найти здесь: http: //pastebin.com/9L4jzMp3. Любая помощь будет оценена по достоинству. –