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似乎是一个合理的地方,可以集中有关如何将规则应用于数据以生成结果的知识。如果您尝试将所有这些逻辑推入结果或规则的类构造函数中,则会导致紧密耦合和内聚力丧失。
归档时间: |
|
查看次数: |
1533 次 |
最近记录: |