处理可能未完全初始化的对象的推荐方法是什么?
e.g。采取以下代码(在ruby中我的头顶):
class News
attr_accessor :number
def initialize(site)
@site = site
end
def setup(number)
@number = number
end
def list
puts news_items(@site, @number)
end
end
显然,如果我这样做:
news = News.new("siteA")
news.list
我会遇到问题。我需要在news.setup(3)
之前news.list
。
但是,我应该注意哪些设计模式?
我应该创建默认值吗?或者使用固定数量的参数来确保对象被正确初始化?
或者我只是担心这里的小东西。
答案 0 :(得分:1)
我应该创建默认值吗?
设置默认值是否有意义?如果是这样,这是一个完全有效的方法恕我直言
或者使用固定数量的参数来确保对象被正确初始化?
您应该确保无法将对象构建为无效状态,这样可以使您和您代码的其他用户更加简单。
在您的示例中,不以某种方式初始化number
是一个问题,此方法是temporal coupling的示例。你应该避免这种情况,你建议的两种方法是这样做。或者,您可以使用另一个对象或静态方法来负责在有效状态下构建对象
如果你确实有一个未完全初始化的对象,那么任何无效的方法都应该产生适当的描述性异常,让用户知道他们正在错误地使用代码,并提供正确使用模式的示例。
在c#中,InvalidStateException通常是合适的,Java中也存在类似的异常。不幸的是,Ruby超出了我的工资等级:)