给定这样的 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
这段代码可能有异味。有没有更好的方法来写这个?
给定这样的 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
这段代码可能有异味。有没有更好的方法来写这个?
这是一个从创建对象中提取条件的示例。
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
并不真地。如果你想节省空间,你可以使用一个衬垫:
def create_object_and_do_if_necessary params
do_precondition_stuff if necessary?
object = create_object params
do_postcondition_stuff object if necessary?
end
鉴于这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