gpt4 book ai didi

grails - 向 grails 服务添加保存方法的良好可维护方法

转载 作者:行者123 更新时间:2023-12-02 08:22:44 25 4
gpt4 key购买 nike

我正在 github 上查看示例宠物诊所 grails 应用程序.

它有一个名为 PetclinicService 的用于创建宠物的服务,该服务具有添加宠物的方法:

Pet createPet(String name, Date birthDate, long petTypeId, long ownerId) {
def pet = new Pet(name: name, birthDate: birthDate, type: PetType.load(petTypeId), owner: Owner.load(ownerId))
pet.save()
pet
}

Controller 正在使用它,如下所示:

def pet = petclinicService.createPet(params.pet?.name, params.pet?.birthDate,
(params.pet?.type?.id ?: 0) as Long, (params.pet?.owner?.id ?: 0) as Long)

我很想知道这是否是在 grails 中保存某些内容的最佳方法?使用这种方法,如果我向 Pet 域添加另一个字段,例如 String color,那么我将不得不接触三个类(Pet、PetController 和 PetclinicService )以完成更改。

有没有办法可以将整个 params 对象发送到服务中并使其自动映射到域?

最佳答案

我进行了这一更改,因为标准是传入 params 映射,但由于某些原因,这很糟糕。一是它将服务层与 Web 层耦合起来。这不是严格的耦合,因为它只是一个映射,但服务应该是可重用和独立的。另一个是该 map 是一张“魔法” map ,您需要知道按键才能使用它。通过使用命名和类型化方法参数,代码更具可读性和可理解性。

这确实增加了维护负担,因为正如您所指出的,添加新字段需要更改签名,但理想情况下,此方法将是完成这项工作的一个地方,因此您只需在一处更改它。

您可以在自己的代码中随意使用params,但由于该项目是我们的演示项目之一,我希望它尽可能使用最佳实践。

关于grails - 向 grails 服务添加保存方法的良好可维护方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15073726/

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