Подходит ли Grails для сложных задач? - PullRequest
4 голосов
/ 24 октября 2011

Наша организация планирует использовать Grails для реализации комплекса приложение с интерфейсом REST. У меня есть опасения по поводу масштабируемости рамки, учитывая, что:

  • классы доменов наверняка будут активно использовать полиморфизм. Я слышал, что у людей есть проблемы с наследованием в Grails, например из-за этой проблемы в JIRA .

  • Деревья объектов будут сохранены в базе данных. В ГОРМе это будет что-то вроде:

    class Node
    {
      static def hasMany = [children: Node]
    }
    

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

  • предполагается, что база данных будет расти для хранения миллионов объектов и должен работать с Oracle, SQL Server и PostgreSQL. Насколько реально рассчитывать на отображение Grails DB, чтобы иметь эту совместимость бесплатно?

  • мы планируем использовать ограничения пользовательских доменов для проверки согласованность доменных объектов. Но у меня есть ощущение, что то, что вы можете сделать в валидаторе, ограничено (я не уверен, что вы можете, например, загрузить набор других объектов)

  • бизнес-логика, реализованная в сервисах, будет многопоточной

Большинство примеров в книгах и в Интернете показывают очень просто приложение с CRUD-операцией на независимых наборах объектов.

Боюсь, что в итоге я использую очень маленькое подмножество Grails, когда приложение растет, как скаффолдинг, веб-потоки, ajax или даже схема БД, сгенерированная классами домена, может не соответствовать именно к потребностям моего приложения.

Кто-нибудь может поделиться опытом использования Grails для такого приложение?

Ответы [ 4 ]

8 голосов
/ 24 октября 2011

классы доменов наверняка будут активно использовать полиморфизм. я слышал люди имеют проблемы с наследованием в Grails, например, потому что этой проблемы на JIRA.

Улучшено наследование в Grails 2.0. См. Раздел Абстрактное наследование . Проблема, упомянутая в сообщенной ошибке JIRA, может быть решена путем объявления свойства как временного.

Деревья объектов будут сохранены в базе данных. В GORM это будет что-то вроде:

Самореферентные отношения в порядке. Для получения дополнительной информации см. Grails в действии, глава 3.

предполагается, что база данных будет расти для хранения миллионов объектов и должна работать с Oracle, SQL Server и PostgreSQL. Насколько реально рассчитывать на отображение Grails DB, чтобы иметь эту совместимость бесплатно?

Grails построен на Hibernate, уровне ORM корпоративного качества, используемом в различных крупных J2EE-приложениях. В зависимости от типов запросов, которые вы выполняете, вам может понадобиться использовать критерии и настройки на этом уровне, но Grails не предоставляет никаких внутренних ограничений, которые мешают его масштабированию.

мы планируем использовать механизм пользовательских ограничений домена для проверки согласованности объектов домена. Но у меня есть ощущение, что вы можете делать в валидаторе ограниченно (я не уверен, если вы можете, например, загрузить набор других объектов)

Вы можете выполнить валидацию с помощью this . Вы также можете определить свои собственные пользовательские классы валидаторов .

бизнес-логика, реализованная в сервисах, будет многопоточной

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

Наша организация планирует использовать Grails для реализации сложного приложения с интерфейсом REST.

Интерфейсы REST довольно забавны и просты с Grails. См. Grails в действии Глава 11 или Глава 9/13 Начало Groovy и Grails от новичка до профессионала .

Grails построен на проверенных технологиях J2EE, таких как Spring и Hibernate . В то время как «из коробки» может занять только так далеко, платформа настраивается на разных уровнях для удовлетворения ваших потребностей. Таким образом, вы по существу спрашиваете, хорошо ли масштабируется J2EE. Многие люди говорят, что да .

7 голосов
/ 24 октября 2011

Твиттер изначально был выпущен в Ruby on Rails. В конце концов у них возникли проблемы с масштабируемостью, и им пришлось заменить деталь (они решили сделать это с помощью Scala). Недавно они заменили все остальные Ruby / rails на Java, что позволило им перенастроить 9/10 своих серверов из-за повышения эффективности.

Так спросите, соответствует ли Ruby / Rails их потребностям?

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

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

Я считаю, что это большая история успеха для Ruby on Rails, Java и Agile-мышления.

Вы найдете похожую историю с Grails (она может быть немного менее хорошо поддержана, но затем будет ближе к архитектуре (J2EE), которая позволит вам масштабировать, когда вам нужно)

6 голосов
/ 24 октября 2011

(1) можно обойти с классом. Не лучшее решение, но может работать, пока вам не понадобится множественное наследование. В конце концов, вам не нужно справляться с такими отношениями с Граилсом.

(2) зависит от того, что вам нужно. Grails и Hibernate поддерживают отображение деревьев . Кстати, если вы точно не знаете, как он должен себя вести, это признак того, что вам все равно придется потом придумывать какое-то сложное поведение.

(3) Это так. У нас есть сотни тысяч записей в DB2, MySQL, hsql и Postgre. Во всяком случае, это проверенный временем Hibernate.

(4) Правда, вам лучше не делать никаких запросов к БД в валидаторе - по крайней мере, через GORM, так как это flush() текущий несовместимый сеанс. Хотя, я полагаю, вы все еще можете использовать SQL или withNewSession{} там.

(5) Я не вижу проблем с многопоточностью в службах или чем-либо еще У вас есть точный контроль над созданием экземпляра Сервиса, например, Сервис с областью запроса может использовать сервис Singleton (при условии, что требуется Singleton), причем последний написан с полным учетом параллельных потоков.

И да, Grails - отличный быстрый старт, когда важно выходить на рынок.

0 голосов
/ 20 марта 2012

Лучший ответ на этот вопрос - показать несколько примеров стартапов, созданных с использованием среды веб-приложений Grails: Стартапы Grails .

...