- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我找不到任何关于做 Domain Driven Design 的信息(DDD) 与 Grails。
我正在寻找任何最佳实践、经验笔记甚至开源项目,这些项目都是使用 Grails 进行 DDD 的良好示例。
最佳答案
Grails 是 卓越以领域驱动设计风格实现应用程序的平台。 Grails 方法的核心是驱动整个开发过程的域类。正如您可能已经猜到的那样,Grails 中词域的选择不仅仅是巧合。
您首先定义域类,然后您可以使用 Grails 完成所有繁重的工作,以提供持久性和生成 GUI。值得注意的是,DDD这本书写的时候,是在Grails或其他类似框架创建之前,所以书中处理的很多问题都与框架解决或大大减少的问题有关。
Grails 解决的一些 DDD 概念
我会用 DDD pattern summary解决不同的 DDD 元素。 (引号在下面的文本中用斜体表示)。
领域模型
域模型是通过域类、服务、存储库和其他 DDD 模式构建的。让我们详细看看这些。
实体
“当一个对象通过它的身份而不是它的属性来区分时,把它作为它在模型中的定义的主要内容”
这些是 Grails 中的域类。它们带有已经通过 GORM 解决的持久性。模型可以使用 GORM DSL 进行微调。看一下 hasOne 与belongsTo 属性。它可用于定义实体及其关系的生命周期。 belongsTo 将导致对相关实体的级联删除,而其他则不会。所以,如果你有一个 Car 对象,你可以说 Motor“属于”一个 Car,在这种情况下,Car 是一个聚合根,而 Motor 是一个聚合。请注意,我在这里谈论的是实体之间的生命周期关系而不是持久性。
值对象
“当您只关心模型元素的属性时,请将其归类为 VALUE OBJECT。让它表达它所传达的属性的含义,并赋予它相关的功能。将 VALUE OBJECT 视为不可变的。不要给它任何身份……”
在 Grails 中,您可以使用 “embedded” GORM 字段中的属性来管理值对象。值对象只能通过它所属的实体访问,没有自己的ID,并且映射到与它所属的实体相同的表。 Groovy 还支持 @Immutable注释,但我不确定它如何与 Grails 一起使用。
服务
“当域中的重要过程或转换不是实体或值对象的自然责任时,将操作作为声明为服务的独立接口(interface)添加到模型中。使 SERVICE 无状态。”
就像实体一样,Grails 原生支持服务。您将 Grails 服务放在 Grails 项目的 services 目录中。服务带有以下开箱即用的功能:
关于grails - 带 Grails 的 DDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2378069/
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我们正在尝试使用 https://grails.org/plugin/jms用于 jms 集成。但我们无法解决它。 环顾四周,我能够验证它是否存在于这个 repo 中: http://repo.gra
我有许多集成测试在grails 3中失败(而在grails 2中通过),因为它无法解析导入: grails.test.MockUtils grails.test.Grails模拟 我找不到有关应如何迁
有没有办法在 Grails 站点上发生 Grails 错误时向自己发送详细信息? 设置它的最佳方法是什么?在一个地方? (试图保持干燥) 我想包括产生错误的 URL。 最佳答案 . 如果您打算捕获项目
我有一个 grails 应用程序,其中包含一些被序列化为 JSON 的域对象。在另一个 java/groovy 项目中,我想使用这些域对象。如果我发布一个插件,看起来只有其他 grails 应用程序可
我正在尝试为 Grails 编写一个插件,该插件将根据我们在遗留数据库中设计的特殊 View 自动生成我的域类。我基本上只是想节省一些时间手动编写使域类工作所需的所有映射内容。 我是否可以从自定义 A
我正在尝试编写一个可以在多个 Grails 应用程序中重用的插件。该插件基本上应该是 spring security core 的包装器和 ldap 插件。 这意味着它应该包含: 用户/角色的域类 S
我有一个应用程序,我在其中使用 Spring Security 和 grails 旋律。我计划在生产环境中运行 grails melody,但不希望访问者访问它。我应该如何做到这一点?我尝试在 gra
我只是继承了一个现有的应用程序,而我注意到的第一件事是我必须在每个“grails run-app”之前进行“grails clean”操作,否则会出错。创建该项目的人说,他们还有其他几个具有类似设置的
我有一个自定义 toString我的枚举中的方法: enum TaxRate implements Serializable { RATE23(23.0), ... priva
我正在创建一个 Grails 插件作为复杂产品的包装器。该产品对其他产品(如 hibernate)有很多依赖性。问题是,grails 有一些相同的依赖项,但版本不同。 例如。 Grails -> 休眠
当我掉进 grails 服务的兔子洞时,我目前正在将业务逻辑从 Controller 方法转移到服务。我的服务中有以下方法: Job closeJobOpportunity(Job op, Emplo
我只收到默认验证器消息。我究竟做错了什么? class Questao { static hasMany = [alternativas:Alternativa] static constraints
Closed. This question needs to be more focused 。它目前不接受答案。 想改善这个问题吗?更新问题,使其仅通过 editing this post 关注一个
特定版本的 Grails 支持多长时间?一般的 VMWare 支持策略似乎是支持当前版本和一个版本。我无法找到任何关于支持多长时间版本的 Grails 特定信息,通用 VMWare 策略是否适用? 最
我有一个通过 grails 交互模式运行的 grails 应用程序。此应用程序包含服务、tagLibs、gsps 等,但最重要的是它包含 src/groovy 文件夹中的 groovy 文件。 这些
LinkedIn 的人们一直在以一种有趣的方式使用 Play 来处理需要由许多不同组件组成的页面:http://engineering.linkedin.com/play/composable-and
我在 Grails 应用程序中使用 Servlet 3.0 异步渲染。我收到以下错误。 | Error 2014-04-29 11:10:24,125 [Actor Thread 28] ERROR
我看了Controller.groovy源代码,看起来 CRUD 操作不是事务性的(至少是明确的)。 如果我是对的,这是否意味着不应该在生产中按原样使用动态脚手架?有没有办法使它具有事务性(即我可以修
我如何基本上对字符串数据类型字段执行唯一约束。 class User{ String username String Email static hasMany = [roles:Roles
我是一名优秀的程序员,十分优秀!