如何在 Grails 中拆分域逻辑和数据访问(这是一个好主意)?
我们编写的许多软件应用程序都以数据(基础)为中心,在 Grails 中,通常会从服务类或控制器直接持久化到 DataSource.groovy 中配置的数据库。更改数据库很容易,但我们并不是真正独立于代码中的持久性实现。
我正在尝试编写一个为不同的持久性和数据源(不仅是数据库)实现打开的应用程序,并专注于业务领域而不是数据库实体。这也是测试时的一个优点(易于编写假/模拟持久性) 最初我只有一个持久性实现 - Grails 域类,使用 GORM。但有可能我将来希望拥有数据库以外的其他数据源,例如休息服务或其他东西。
目前,我只将数据库作为数据源,并且主要做一些杂乱无章的事情(以及一些域逻辑)。我认为我仍然停留在“旧”思维中,专注于数据库持久性,因为我的大多数业务域类都有一个 Grails 域类等价物,它是它的副本。当要持久化域类时,我只需将属性复制到 Grails 域类。
我对这个解决方案不太满意。我可以想到至少两个可能的改进/更改:
- 我的 Grails 域类的组织方式可能与业务域类不同,因此我不只是将属性从一个类复制到另一个类。但是,在从数据库读取或写入数据库时,这仍然会涉及从一个类到另一个类的大量属性映射。
- 也许有一种方法可以从常规的 src/main/groovy 包中使用业务领域类并用 GORM 东西装饰?或者以其他方式拆分域逻辑和持久性?我已经看到可以通过在域类上使用 hibernate conf 来做到这一点。这是唯一的方法吗?
我看过一些关于 Grails 架构的有趣讨论,包括干净的架构、六边形架构和 ddd,但我还没有找到任何示例。有吗?
在这一点上,正如我所说,大部分功能都是 CRUD 的东西,但不是全部。更进一步,应用程序可能有更多的业务逻辑,所以我不希望使用带有视图、控制器、服务、域的 Grails 的“默认”架构。我想要一个独立于 grails 视图/控制器和域/GORM 的“核心”应用程序