Я не могу найти информацию о выполнении Domain Driven Design (DDD) с Grails.
Я ищу любые лучшие практики, опытные заметки или даже проекты с открытым исходным кодом, которые являются хорошими примерами DDD с Grails.
Я не могу найти информацию о выполнении Domain Driven Design (DDD) с Grails.
Я ищу любые лучшие практики, опытные заметки или даже проекты с открытым исходным кодом, которые являются хорошими примерами DDD с Grails.
Grails - это платформа par-excellence для реализации приложений в стиле Driven Design. В центре подхода Grails находятся классы домена, которые управляют всем процессом разработки. Как вы, наверное, догадываетесь, выбор доменного домена в Grails - это не просто совпадение.
Вы начинаете с определения своих классов доменов, а затем можете использовать Grails для выполнения всех тяжелых операций при сохранении и генерации графического интерфейса. Стоит отметить, что когда книга DDD была написана, это было до того, как были созданы Grails или другие подобные структуры, поэтому многие проблемы, затронутые в книге, связаны с проблемами, которые были решены или значительно сокращены рамками.
Я использую описание шаблона DDD для адресации различных элементов DDD. (Котировки выделены курсивом в тексте ниже).
Модель домена структурирована через классы домена, службы, репозитории и другие шаблоны DDD. Давайте подробно рассмотрим каждую из них.
"Когда объект отличается своей идентичностью, а не его атрибутами, сделайте это первичным для своего определения в модели"
Это классы домена в Grails. Они приходят с упорством, уже разрешенным через GORM. Модель может быть точно настроена с использованием GORM DSL. Взгляните на свойство hasOne vs. ownTo. Его можно использовать для определения жизненного цикла объектов и их отношений. attribTo приведет к каскадным ударам связанным объектам, а другим - нет. Итак, если у вас есть объект Car, вы можете сказать, что Motor "принадлежит" автомобилю, и в этом случае Car является агрегатным корнем и двигателем агрегатом. Обратите внимание, что я говорю здесь о соотношении жизненного цикла между сущностями, а не о сохранении.
"Когда вы заботитесь только об атрибутах элемента модели, классифицируйте его как ОБЪЕКТ VALUE. Сделайте это, чтобы выразить смысл атрибутов, которые он передает, и дайте им связанные функции. Относитесь к объекту VALUE как непреложному. это любая личность..."
В Grails вы можете использовать "embedded" свойство в поле GORM для управления объектом значения. Объект Value может быть доступен только через объект, к которому он принадлежит, не имеет собственного идентификатора и сопоставляется с той же таблицей, что и объект, к которому он принадлежит. Groovy также поддерживает @Неизбежно аннотация, но я не уверен, как она играет с Grails.
"Когда существенный процесс или преобразование в домене не является естественной ответственностью объекта ENTITY или VALUE, добавьте операцию в модель как автономный интерфейс, объявленный как СЕРВИС. Сделайте SERVICE без гражданства".
Так же, как сущности, службы поддерживаются в Grails. Вы размещаете свою службу Grails внутри каталога сервисов в проекте Grails. Услуги поставляются со следующей версией:
"Выберите MODULES, которые расскажут историю системы и содержат сплоченный набор понятий".
Grails plug-in механизм предоставляет это и многое другое: очень простой способ установки и создания плагинов, определяет, как приложение может переопределять плагины и т.д..
"Скопируйте объекты ENVTIES и VALUE в AGGREGATES и определите границы вокруг каждого. Выберите один ENTITY, чтобы быть корнем каждого AGGREGATE, и контролируйте весь доступ к объектам внутри границы через корень. Разрешить внешним объектам удерживать ссылки на только корень."
Я уже упомянул некоторые механизмы управления жизненным циклом. Вы можете использовать службы Grails Services и механизм контроля доступа к языку для обеспечения контроля доступа. У вас может быть служба Grails, играющая роль репозитория DDD, который разрешает доступ только к Aggregate Root. Хотя контроллеры в Grails могут напрямую обращаться к операциям GORM на Entities, я бы утвердил, что для лучшего многоуровневого дизайна контроллерам необходимо вводить услуги, которые делегируются операциям GORM Active Record.
"Сменить ответственность за создание экземпляров сложных объектов и AGGREGATES на отдельный объект, который сам по себе не может нести ответственность в модели домена, но все еще является частью дизайна домена."
Groovy builders - отличная альтернатива для построения сложных объектов через богатый DSL. В DDD заводы более свободны и не переходят непосредственно к GoF Аннотация Factory или Factory Метод. Groovy сборщики - это реализация DSL шаблона GoF Builder.
"Для каждого типа объекта, который нуждается в глобальном доступе, создайте объект, который может обеспечить иллюзию коллекции в памяти всех объектов такого типа. Настройте доступ через общеизвестный глобальный интерфейс. и удалять объекты, которые будут инкапсулировать фактическую вставку или удаление данных в хранилище данных. Предоставить методы, которые выбирают объекты на основе некоторых критериев и возвращать полностью созданные объекты или коллекции объектов, значения атрибутов которых соответствуют критериям, тем самым инкапсулируя фактическое хранилище и технологии запросов. Предоставляйте репозитории только для корней AGGREGATE, которые фактически нуждаются в прямом доступе. Держите клиента ориентированным на модель, делегируя все хранение объектов и доступ к REPOSITORIES."
Служба Grails может использоваться для реализации выделенного объекта репозитория, который просто делегирует свою работу Grails GORM. Стойкость решена с магией GORM. Каждый класс домена предоставляет набор динамических методов, которые разрешают типичные операции CRUD, включая запрос ad-hock.
"Состояние пост-условий операций и инвариантов классов и AGGREGATES. Если ASSERTIONS не могут быть закодированы непосредственно на вашем языке программирования, напишите им автоматические модульные тесты".
"Гибкий дизайн может позволить клиентскому коду использовать декларативный стиль дизайна. Чтобы проиллюстрировать, следующий раздел объединит некоторые из шаблонов в этой главе, чтобы сделать СПЕЦИФИКАЦИЯ более гибкой и декларативной".
Здесь Grails выделяется из-за динамической природы Groovy языка и поддержки шаблонов Builder для создания пользовательских DSL.
Приходит "из коробки" с Grails через предлагаемую "" Конвент Конфигурация" в виде многоуровневой MVC.
В настоящее время мне неизвестны какие-либо книги, относящиеся к Grails и DDD. Лично я бы не сосредоточился только на Граале. Domain Driven Design - это способ мышления, способ организации вашего приложения и кода. Таким образом, он не связан с технологией.
Парадигма MVC не рассматривает модели как объекты доступа к данным. На самом деле он даже не упоминает уровень доступа к данным, поскольку он понимается под ним/инкапсулируется моделью. Это приводит к некоторым ошибкам при попытке использовать DDD с технологиями MVC на основе шаблона ActiveRecord, который объединяет логику домена и код доступа к данным в модель. Он работает очень хорошо... особенно в простых приложениях с небольшой логикой домена, где нет реального различия. Но когда ситуация становится более сложной, нужно иметь в виду, что модель!= Доступ к данным.
Лично я бы подумал об улучшении моего понимания DDD:
Ура!
После прочтения этого вопроса я немного почитал как DDD, так и Grails. Я не уверен, что Grails должен был поддерживать DDD.
Однако я прочитал некоторые сообщения, которые Grails поддерживает DDD Grails и DDD
Однако я думаю, что Grails в основном поддерживает шаблон Active record, Разъяснение здесь
Для Grails каждый объект домена является совокупным корнем, это само по себе относится к DDD.
Средство обхода орехов Grails Aggregate #
Реализация DDD Java, можно ли использовать аналогичный пример реализации DDD-образа Grails?
Многие вещи, такие как репозитории, могут быть легко реализованы через Grails, мне очень нравится и думаю, что это увеличивает производительность.
Однако у меня есть сомнения, когда люди говорят, что Grails и DDD идут рука об руку.
DDD - это технологический способ организации программного обеспечения.
Да DDD может быть реализован с использованием Grails.
Сударшан, вы указали, что Grails не справляется с концепцией совокупных корней. Есть ли какая-либо структура, с которой вы работали, имеет концепцию совокупного корня? В самих структурах не должно быть понятий DDD (если только он сам не является базой DDD, но я еще не сталкивался с платформами DDD).
Это идея и должна быть технологической агностикой, поэтому разработчики приложений должны включать такие понятия. В Grails довольно сложно различать сущность и совокупный корень, используя статические методы, такие как Person.get(1) или Person.findByName( "name" ), но это не так. Поэтому ответственность разработчиков заключается в том, чтобы отличить это от других средств, таких как использование конвенции.
Я нашел эту статью, это может представлять определенный интерес. Я процитировал основной интерес.
"DK: динамические и расширяемые леса Grails позволяют легко применять принципы DDD, без ограничений и сложности некоторых DDD рамки".
www.infoq.com/articles/ddd-in-practice
"Рамки, такие как Spring и поддержка Real Object Oriented (ROO), Hibernate и Dozer для проектирования и реализации модели домена. Другими системами поддержки DDD являются JMatter, Naked Objects, Ruby On Rails, Grails и Spring Модули XT Framework."
grails.org/doc/latest/guide/introduction.html
"Динамические структуры, такие как Rails, Django и TurboGears, помогли проложить путь к более современному способу мышления о веб-приложениях. Grails основывается на этих концепциях и значительно снижает сложность построения веб-приложений на платформе Java., однако, заключается в том, что он делает это, опираясь на уже созданные Java-технологии, такие как Spring и Hibernate."
Bascily, что работает с Spring, также будет работать с Grails.
Я надеюсь, что когда-нибудь сообщество предоставит нам всех ddd-образец, написанный в Grails.
dddsample.sourceforge.net
//spam mech не позволяет мне помещать больше двух ссылок в один пост, soz
попробуйте прочитать Grails in Action, он представлен в главе 3. он представлен, позволяя вам работать над образцом проекта и даже показывать, пошаговую процедуру о том, как ее создавать с нуля, а также добавлять плагины и т.д. Я настоятельно рекомендую эту книгу, очень ценную ссылку.
Заметьте, что я тоже новый пользователь Grails.