bir*_*rdy 5 grails groovy grails-orm
我在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
}
Run Code Online (Sandbox Code Playgroud)
这是从控制器使用,如下所示:
def pet = petclinicService.createPet(params.pet?.name, params.pet?.birthDate,
(params.pet?.type?.id ?: 0) as Long, (params.pet?.owner?.id ?: 0) as Long)
Run Code Online (Sandbox Code Playgroud)
我很想知道这是否是保存grails内容的最好方法?使用这种方法,如果我向Pet域添加另一个字段,比如说String color,那么我将不得不触摸三个类(Pet, PetController, and PetclinicService)以使更改完成.
有没有办法将整个params对象发送到服务并让它自动映射到域?
我做了那个改变,因为标准是传递给params地图,但是由于一些原因这很糟糕.一个是它将服务层与Web层相结合.这不是严格的耦合,因为它只是一个Map,但服务应该是可重用和独立的.另一个是地图是一个"魔术"地图,你需要知道密钥才能使用它.通过使用命名和类型化方法参数,代码更易读和易懂.
这确实增加了维护负担,因为当您指出添加新字段需要更改签名时,但理想情况下,此方法将是完成此工作的地方,因此您只需在一个位置更改它.
随意params在您自己的代码中使用,但由于这个项目是我们的一个演示项目,我希望它尽可能使用最佳实践.
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |