2

给定这样的 Ruby 方法:

def create_object_and_do_if_necessary params
   if necessary?
      do_precondition_stuff
   end
   object = create_object params
   if necessary?
      do_postcondition_stuff object
   end
end

这段代码可能有异味。有没有更好的方法来写这个?

4

3 回答 3

1

这是一个从创建对象中提取条件的示例。

def create_object_and_do_if_necessary(params)
  with_around_conditions { create_object(params) }
end

def with_around_conditions
  do_precondition_stuff if precondition_stuff_necessary?
  object = yield
  do_postcondition_stuff object if postcondition_stuff_necessary?
  object
end
于 2013-08-27T02:17:56.400 回答
1

并不真地。如果你想节省空间,你可以使用一个衬垫:

def create_object_and_do_if_necessary params
   do_precondition_stuff if necessary?
   object = create_object params
   do_postcondition_stuff object if necessary?
end
于 2013-08-27T02:03:54.113 回答
0

鉴于这necessary?是您在对 Linuxios 答案的评论中所写的一种繁重的方法,您能做的最好的事情就是保留条件结果的标志。

def create_object_and_do_if_necessary params
  flag = necessary? # which is long or heavy
  do_precondition_stuff if flag
  create_object params
  do_postcondition_stuff object if flag
end
于 2013-08-27T05:36:46.870 回答