max*_*max 9 python architecture oop design-patterns class-factory
(使用Python 3.2,虽然我怀疑它很重要.)
我有class Data,class Rules和类Result.我使用小写来表示类的实例.
甲rules对象包含,如果施加到一个规则data对象,可以创建一个result对象.
我决定在哪里放置实际将规则应用于数据的(相当复杂和不断发展的)代码.我可以看到两个选择:
把那些代码放在一个类Result方法中,比如说parse_rules.Result构造函数将rules对象作为参数,并将其传递给self.parse_rules.
将该代码放在一个新类中ResultFactory.ResultFactory将是一个单例类,它有一个方法,比如说build_result,它接受rules一个参数并返回一个新构建的result对象.
这两种方法的优点和缺点是什么?
GRASP设计原则为面向对象设计中的类和对象分配职责提供了指导。例如,创建者模式建议:一般来说,如果满足以下一项或多项(最好是多项),则类 B 应该负责创建类 A 的实例:
在您的示例中,您有复杂且不断发展的代码,用于将规则应用于数据。这表明使用工厂模式。
将代码放入结果中是禁忌的,因为 1) 结果不会创建结果,2) 结果不是信息专家(即,他们不具备所需的大部分知识)。
简而言之,ResultFactory似乎是一个合理的地方,可以集中有关如何将规则应用于数据以生成结果的知识。如果您尝试将所有这些逻辑推入结果或规则的类构造函数中,则会导致紧密耦合和内聚力丧失。