【发布时间】:2014-07-29 00:14:44
【问题描述】:
我有一个非常丑陋的函数,我想重构它。 示意性地,该函数需要 2 个对象,访问几个 这些对象的属性和方法,组合它们并使用它们和 组合结果以实例化结果对象。
看起来像这样:
def ugly(obj_a, obj_b):
a_1 = obj_a.a_1
sub_a_1 = obj_a.get_sub()
r_1 = obj_b.combine(a_1)
if r_1 < 0:
raise ValueError
if not sub_a_1.validate():
raise Exception
return ResultObj(a_1, r_1, sub_a_1.get_matrix(), obj_b.some_other_attribute)
除了在两者上都可以访问许多属性和方法 对象,以及许多传递给 ResultObj 的构造函数值。
这个函数是单元/集成测试的噩梦。就目前而言,我 将不得不模拟 obj_a 和 obj_b 以及它们的所有方法和 属性。
对于重构这种类型的代码,您有什么建议?理想情况下我 不必更改 obj_a 和 obj_b 的实现。
这是在 Python 中,所以面向对象和函数式设计都可以工作。
谢谢
【问题讨论】:
标签: python design-patterns refactoring