带Grails的DDD

带Grails的DDD,grails,domain-driven-design,Grails,Domain Driven Design,我找不到任何关于使用Grails执行(DDD)的信息 我正在寻找任何最佳实践、经验笔记,甚至是开源项目,它们都是使用Grails实现DDD的好例子。请阅读第3章。它是通过让你在一个示例项目上工作来展示的,甚至展示了如何从头开始构建它以及添加插件等的一步一步的过程。我强烈推荐这本书,非常有价值的参考 请注意,我也是一名新的grails用户。目前我还不知道有任何与grails和DDD相关的书籍。就我个人而言,我不会只关注圣杯。领域驱动设计是一种思维方式,一种组织应用程序和代码的方式。因此,它与技术无

我找不到任何关于使用Grails执行(DDD)的信息

我正在寻找任何最佳实践、经验笔记,甚至是开源项目,它们都是使用Grails实现DDD的好例子。

请阅读第3章。它是通过让你在一个示例项目上工作来展示的,甚至展示了如何从头开始构建它以及添加插件等的一步一步的过程。我强烈推荐这本书,非常有价值的参考


请注意,我也是一名新的grails用户。

目前我还不知道有任何与grails和DDD相关的书籍。就我个人而言,我不会只关注圣杯。领域驱动设计是一种思维方式,一种组织应用程序和代码的方式。因此,它与技术无关

范例不考虑模型是数据访问对象。事实上,它甚至没有提到数据访问层,因为它被理解为在模型之下/由模型封装。这在尝试将DDD与基于ActiveRecord模式的MVC技术结合使用时引入了一些陷阱,ActiveRecord模式将域逻辑和数据访问代码合并到模型中。它工作得很好。。。特别是在没有真正区别的领域逻辑的简单应用程序中。但当事情变得更复杂时,我们应该记住这个模型数据访问

我个人会考虑提高我对DDD的理解:


干杯

阅读完这个问题后,我对DDD和Grails都做了一些阅读。但我不确定grails是否打算支持DDD

然而,我在一些帖子上读到Grails确实支持DDD

但是我认为Grails主要支持活动记录模式

对于Grails,每个域对象都是聚合根,这本身就不符合DDD

,我们可以有一个类似的grailsdddd实现示例吗

很多像存储库这样的东西都可以通过Grails轻松实现,我非常喜欢它,并且认为它提高了生产率


然而,当人们说Grails和DDD是齐头并进的时候,我有点怀疑。

我发现这篇文章可能会引起一些兴趣。我已经引述了主要的兴趣线

DK:Grails的动态和可扩展的脚手架使其易于应用 DDD原则,不受某些DDD的限制和复杂性 框架。”


DDD是一种与技术无关的软件组织方式

是的,DDD可以使用Grails实现

Sudarshan您已经指出Grails没有处理聚合根的概念。您使用过的任何框架都有聚合根的概念吗?框架本身不应该有DDD的概念(除非它本身就是一个DDD框架,但我还没有遇到DDD框架)


这是一个想法,应该是技术无关的,因此应由应用程序开发人员将这些概念结合起来。在Grails中,使用Person.get(1)或Person.findByName(“name”)等静态方法来区分实体和聚合根有点困难,但这不是重点。因此,开发人员有责任通过一些其他方式(如使用约定)来区分这一点。

Grails是以领域驱动设计风格实现应用程序的卓越平台。Grails方法的核心是驱动整个开发过程的域类。正如您可能猜到的,在Grails中选择单词domain不仅仅是巧合

首先定义域类,然后使用Grails完成提供持久性和生成GUI的所有繁重工作。值得注意的是,当DDD书被编写时,它是在Grails或其他类似框架被创建之前,因此书中处理的许多问题都与框架解决或大大减少的问题有关

Grails解决的一些DDD概念 我将使用它来处理不同的DDD元素。(下文中的引号为斜体)

域模型 域模型是通过域类、服务、存储库和其他DDD模式构建的。让我们详细地看一下其中的每一个

实体 当通过对象的标识而不是属性来区分对象时,将其作为模型中其定义的主对象

这些是Grails中的域类。他们的坚持已经通过GORM解决了。可以使用GORM DSL对模型进行微调。看看hasOne vs.belongsTo酒店。它可用于定义实体及其关系的生命周期。belongsTo将导致对相关实体的级联删除,而其他实体则不会。所以,如果你有一个Car对象,你可以说Motor“属于”一辆车,在这种情况下,Car是一个聚合根,Motor是一个聚合。请注意,我在这里谈论的是实体之间的生命周期关系,而不是持久性

价值对象 “当您只关心模型元素的属性时,请将其归类为值对象。使其表达所传递属性的含义,并赋予其相关功能。将值对象视为不可变的。不要赋予其任何标识…”

在Grails中,您可以使用GORM字段中的属性来管理值对象。值对象只能通过它所属的实体访问,该实体没有自己的ID,并且映射到与其所属的实体相同的表。Groovy还支持注释,但我不确定它如何与Grails一起使用

服务 如果域中的重要进程或转换不是实体或值对象的自然责任,请将操作作为声明为服务的独立接口添加到模型中。使服务无状态

与实体一样,Grails本机支持服务。将Grails服务放在Grails项目的services目录中。服务随之而来