我正在尝试找出在find_communities
此处进行测试的最佳方法,而不必在这里使用多态性来击败if
盯着我的语句。
class CommunityFinder
def initialize(filters={})
@filters = filters
end
def find_communities
return my_communities if @filters[:my_communities]
visible_communities
end
def my_communities
# [...]
end
def visibile_communities
# [...]
end
end
我都my_communities
和visible_communities
行之有效的,但我对测试的担忧find_communities
。
my_communities
和visible_communities
,因为有可能将是find_communities
永远不会改变。我是不是该:
find_communities
生活在主叫find_communities
自己的策略find_communities
在本示例中,您确实应该有两个子类,每个子类实现自己的communities
方法:
class CommunityFinder::Base
def initialize(**options)
@options = options
end
end
class CommunityFinder::Mine < CommunityFinder::Base
def communities
end
end
class CommunityFinder::Visible < CommunityFinder::Base
def communities
end
end
您可以使用工厂方法来实例化正确的子类:
module CommunityFinder
def self.filter(**options)
if (options[:my_communities])
CommunityFinder::Mine.new(options)
else
CommunityFinder::Visible.new(options)
end
end
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句