假设我有一个A类的对象A。它有一个方法需要以特定类型的另一个对象的形式提供参数 - 但参数也应该处于特定状态,因为该方法执行的操作(假设它正在查询外部服务,但它可能是其他东西) 需要它。
class A(object):
def action(self, argument):
return do_something(argument)
我想到的第一个解决方案很简单:该方法应该对输入数据强制执行一个条件。它应该测试它的所需状态,然后引发异常或修改状态:
class A(object):
def action(self, argument):
if argument.state == False:
raise Exception()
return do_something(argument)
class A(object):
def action(self, argument):
if argument.state == False:
argument.change_state()
return do_something(argument)
但是,我们正在谈论的实例只是A的众多实例之一。所有这些实例都应该对输入数据执行相同的操作:针对特定状态对其进行测试,然后强制执行,或者只是引发异常。似乎他们可以使用参数的共享实例,其所需状态已由外部调用者强制执行,B 类实例:
class B(object):
def action(self, argument):
argument.change_state()
for a in self.instances_of_A:
yield a.action(argument)
因为我认为如果不在方法内部强制执行所需的参数状态,则方法执行的操作不会被正确封装,我认为应该将其移至前调用者。对象a和类 A的所有其他实例只会提供执行操作所需的数据。
class B(object):
def action(self, argument):
argument.change_state()
for a in self.instances_of_A:
yield do_something(argument, a.data)
但是,还有另一个问题:该操作返回一个值,该值可以以与A实例相关的方式解释以获取另一条数据 - 现在似乎操作 do_something 应该封装在类 A的方法中。
我应该如何解决这个问题?我是否应该简单地保留当前设计并使对象成为可用于解释操作提供的返回代码的返回数据?也许我应该使用命令链模式并修改A 类以将操作委托给 A 的其他实例?我还有什么其他方法可以处理它?