Вопрос дизайна: как создать спокойный интерфейс, состоящий из нескольких доменных объектов? - PullRequest
0 голосов
/ 08 апреля 2011

Итак, мы начинаем с Grails в нашей компании и создаем это приложение, которое использует ExtJS в качестве внешнего интерфейса и Grails в качестве внутреннего.

Поскольку ExtJS работает исключительно с JSON для заполнения таблиц данных и тому подобного, перед нами стоит задача создания этих интерфейсов, которые будут отправлять и получать объекты JSON в ExtJS в спокойной манере.

После обсуждения нашей модели предметной области мы остановились на одной. Быстро мы поняли, что некоторые таблицы в системе будут состоять из информации более чем одного объекта домена.

После некоторого поиска мы нашли плагин JSON RESTful API для GORM , который в основном предоставляет интерфейс RESTful для любого данного объекта домена.

Это подводит нас к основному вопросу вопроса.

Как я понимаю, есть два пути.

1) Создайте контроллер, специфичный для каждой таблицы данных в ExtJS, который будет выполнять различные действия, и в рамках каждого действия он будет создавать или получать объект JSon для выполнения CRUD для различных объектов домена, которые использует таблица данных.

На мой взгляд, это заняло бы больше времени. В любом случае, это вариант.

2) Другой вариант для вышеупомянутого плагина - создание «составного» объекта домена, специфичного для таблицы данных, которую мы хотим заполнить (каждый атрибут в этом объекте является столбцом в таблице данных). После этого просто откройте его с помощью плагина JSON RESTful API for GORM, который в основном позаботится обо всех действиях CRUD для нас.

Есть ли способ создать объект, подобный тому, который нам нужен в нашей модели предметной области, без создания дополнительных таблиц базы данных в бэкэнде?

Я считаю, что мы на правильном пути, нам просто нужно немного рекомендаций от экспертов:)

заранее спасибо!

Ответы [ 2 ]

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

Интересно.

В итоге я использовал другой подход, дайте мне знать, что вы думаете.

По сути, мы в итоге использовали этот плагин: http://grails.org/plugin/json-rest-api для предоставления класса домена и выполнения всех операций CRUD.

Мы создали собственный маршаллер JSON для каждого класса, вот так.

Bootstrap.groovy

[...] 
        JSON.registerObjectMarshaller(Person){ 
                def returnArray = [:] 

                returnArray['id'] = it.id 
                returnArray['name'] = it.name 
                returnArray['street'] = it.address.street 

                return returnArray 
        }

Перс.гровы

      //the plugin exposes the class with this 
       static expose = ['person'] 

       String name 
       Address address 
[...] 

Маршаллер фактически действует на то, как класс будет преобразован, когда вызывается метод "as JSON".

Так что теперь, из-за плагина, мы можем сделать

GET <a href="http://mydomain.com/api/person" rel="nofollow">http://mydomain.com/api/person</a> и мы получаем объект json, который имеет информацию от person и других классов, таких как:

{"data":{"id":"1", "name":"Peter", "Spooner St"}} 

Единственное, что нам теперь нужно выяснить, как обновить адрес улицы из обновления или создания, если это возможно.

Мысли?

0 голосов
/ 09 апреля 2011

В вашем случае я бы порекомендовал создать набор объектов Command и контроллеров, которые их обрабатывают. Это элегантно учитывает ваш «составной» подход.

A Командный объект - это класс, который имеет все возможности проверки и привязки данных, которые есть у объектов Domain, но без прямого сохранения.

Ссылки для проверки:

Объекты команд

Ответы JSON

...