gpt4 book ai didi

oop - Grails:当我不想保存任何东西时,我可以使用域对象吗?

转载 作者:行者123 更新时间:2023-12-04 04:18:19 25 4
gpt4 key购买 nike

我的一些领域类变得相当丰富:它们实现了一个有趣的可比性,可能有加、减、乘和 div,许多都有一些方便的 getter,它们调用服务并确定复杂的事情。最重要的是,它们具有正确的属性。我将它们用于正常的“数据库事务”,并且有时我只想要一个具有所有这些方法但可能不想保存它的对象。

我的队友确信这是非常糟糕的,并建议我应该使用 DTO(数据传输对象),据我所知,这将是一个 POGO/POJO,其中一个域类的代码复制/粘贴。这似乎真的不干,我看不到好处。不时将域对象用作常规对象有什么问题吗?我错过了 DTO 的重点吗?

最佳答案

Grails 域类的命名有些错误,因为应用程序的域层通常由持久类和非持久类组成。但 Grails 域类始终是持久的。您可以拥有非持久域(传统意义上的)类,但它们必须位于 src/groovy 或 src/java 中。这可能令人沮丧,因为域层在应用程序中被分成两个地方。我们收到了对非持久域类的请求,例如类似于 static persistent = false或类似的东西,但尚未实现。

我认为,如果您想利用域类的非持久性特性(例如验证、依赖注入(inject)等),那么拥有一些可以由数据库支持但不是的类是可以的。您只需要在代码中记录它或有某种约定,例如特殊的包结构或命名约定。如果你从不调用像 save() 这样的 GORM 方法, list() , findAllByFoo()等,那么将不会有任何数据库访问。

就 DTO 而言,它们可以是 un-DRY,但有一个插件可以提供帮助 - 请参阅 http://grails.org/plugin/dto .它已经有一段时间没有更新了,但我很确定它仍然有效。它有一个很好的特性,它将使用语法 domainObj as DTO 从持久域类实例创建 DTO 实例。 .您确实需要在类之间保持更改同步,但初始 DTO 生成是通过脚本自动生成的。

关于oop - Grails:当我不想保存任何东西时,我可以使用域对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11918276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com