[Grails] 讨论一个编码实现的问题

tongyi121 2008-11-19
现在有一个域类(domain),域类代码如下
class OU {
   ...
   Set<String> members = [] as Set
   
   void addMember(dns){
       members += dns
       this.save()
   }

}

注意上面域类中的addMember方法,是实现往这个ou中增加成员的一个方法,由于动态语言的特性,dns在这里可以是一个String也可以是一个List<String>等集合,但是如果传入的dns为String[],那么就会直接将这个String[]的对象加入到Set中,而不是将里面的元素一个个的加入。为我们的目的,就需要将String[]转成集合类型的,这样就产生了一个问题,我们是该在addMember中处理数组的值呢,还是在controller中将数组转为集合?
如果是在addMember中处理,那么在所有的controller中就可以不需要进行转换的进行调用代码如下
   void addMember(dns){
       if(dns instanceof String[])
       dns = dns as List
       members += dns
       this.save()
   }


或者在controller加入,那么接收到一个String[]就需要进行转换
if(dns instanceof String[])
       dns = dns as List
不知道常规的做法,应该是哪个,理由是什么?


令狐虫 2008-11-19
个人认为第一种方法好
理由是:
addMember方法可能要在多处controller里使用,
1、每次调用时,controller里不必考虑转换的问题
2、需要改代码时改addMember方法一处就可以
你认为呢?
tongyi121 2008-11-19
跟我的想法一样,就是想这么做有什么缺点,或者说有什么不合理的地方?
令狐虫 2008-11-19
暂时没有发现什么缺点
不知道其他同学的想法如何?
Global site tag (gtag.js) - Google Analytics