Возвращение одного и того же списка записей JSON из разных источников - PullRequest
0 голосов
/ 26 апреля 2011

Я использую Grails 1.3.7.Допустим, у меня есть доменные объекты Foo и Bar Foo , и Bar имеют список Noodle экземпляров.В NoodleController , FooController и BarController , у меня есть действие fetchNoodles , которое возвращает список записей JSON, например,

NoodleController

def fetchNoodles = {
  List data = []
  for(noodle in Noodle.list())
    data.add([noodle.id, noodle.name, noodle.stuff]

  render data as JSON
}

FooController

def fetchNoodles = {
  List data = []

  foo = Foo.get(params.id)
  if (foo) {
    for(noodle in foo.noodles())
      data.add([noodle.id, noodle.name, noodle.stuff]
  }

  render data as JSON
}

BarController

def fetchNoodles = {
  List data = []

  bar = Bar.get(params.id)
  if (bar) {
    for(noodle in bar.noodles())
      data.add([noodle.id, noodle.name, noodle.stuff]
  }

  render data as JSON
}

Вопросы

  • Как мне избежать повторения 3 разатот же код?
  • Как добавить фильтрацию к тем действиям по извлечению списка, все еще не повторяя себя?

1 Ответ

1 голос
/ 26 апреля 2011

Просто переместите его на NoodleService.Затем, в BarController, сделайте это как

def noodleService

def fetchNoodles = {
  List data = noodleService.getNoodles(Bar.get(params.id)?.noodles) 
  render data as JSON
}

или

noodleService.getNoodles(Bar.get(params.id)?.noodles, { it.name =~ /A.+/ })) 

, если мы говорим о фильтрации после получения коллекции noodles.Если вам нужно отфильтровать noodles на уровне базы данных, вам нужно получить к ним доступ по-разному, например:

noodleService.getNoodles([barId: params.id], params.subMap(
  ['order', 'sort', 'max', 'offset', 'whatever-filter-field-names-here'])) 

и NoodleService.getNoodles(Map criteriaFields, Map filterFields) запрос noodles с критериями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...