为grails服务添加保存方法的良好可维护方式
发布时间:2020-12-14 16:28:40 所属栏目:大数据 来源:网络整理
导读:我在 github看了样品宠物诊所grails app. 它有一个创建PetclinicService的宠物服务,它有一个添加宠物的方法: Pet createPet(String name,Date birthDate,long petTypeId,long ownerId) { def pet = new Pet(name: name,birthDate: birthDate,type: PetType.
我在
github看了样品宠物诊所grails app.
它有一个创建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 } 这是从控制器使用,如下所示: 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域添加另一个字段,比如字符串颜色,那么我将不得不触摸三个类(Pet,PetController和PetclinicService)以使更改完成. 有没有办法可以将整个params对象发送到服务中并让它自动映射到域? 解决方法
我之所以做出这样的改变,是因为标准是传递参数图,但由于一些原因这很糟糕.一个是它将服务层与Web层相结合.这不是严格的耦合,因为它只是一个Map,但服务应该是可重用和独立的.另一个是地图是一个“魔术”地图,你需要知道密钥才能使用它.通过使用命名和类型化方法参数,代码更易读和易懂.
这确实增加了维护负担,因为当您指出添加新字段需要更改签名时,但理想情况下,此方法将是完成此工作的地方,因此您只需在一个位置更改它. 在您自己的代码中随意使用params,但由于这个项目是我们的一个演示项目,我希望它尽可能使用最佳实践. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |