我有一个BigStructure类,它从一些输入构建复杂的数据结构。它还包括在该数据结构上执行操作的方法。
这个类变得太大了,所以我试着把它一分为二,以提高可维护性。我在想,将操作移动到一个新的类中是很自然的,比如OperationsOnBigStructure类。
不幸的是,由于类BigStructure是独一无二的,OperationsOnBigStructure不能合理地重用于任何其他类。从某种意义上说,它永远与BigStructure捆绑在一起。例如,典型的操作可能包括以仅对BigStructure对象有意义的方式遍历大型结构实例。
现在,我有两个类,但我感觉我没有提高任何东西。实际上,我把事情变得稍微复杂一些,因为我现在需要将BigStructure对象传递给OperationsOnBigStructure中的方法,而它们需要在内部存储该对象。
我是不是应该和一个大班一起生活?
发布于 2012-02-06 16:14:51
我在想,将操作转移到一个新的类中是很自然的,比如OperationsOnBigStructure类。
我要说的是,这与面向对象的设计完全相反。OOD背后的思想是将数据和方法保持在一起。
通常,一个(太)大的类是责任太大的标志:即你的类只是做了太多的事情。看起来您首先定义了一个数据结构,然后向其中添加了函数。您可以尝试将数据结构分解为子结构,并为这些子结构定义独立的类(即使用聚合)。但如果不知道更多就很难说...
当然,有时候,一个程序只需要一个大的类就可以很好地运行。但是如果你自己对它感到不舒服,这是一个强烈的提示,开始做一些事情来反对……
发布于 2014-07-21 23:00:09
对于这个问题,我想出的解决方案是创建一个包含类的包。大致是这样的:
MyClass/
__init__.py
method_a.py
method_b.py
...在我的例子中,__init__.py包含实际的数据结构定义,但不包含方法。要将方法‘附加’到类中,我只需将它们导入到类的命名空间中。
method_a.py的内容:
def method_a(self, msg):
print 'a: %s' % str(msg)__init__.py的内容
class MyClass():
from method_a import method_a
from method_b import method_b
def method_c(self):
print 'c'在python控制台中:
>>> from MyClass import MyClass
>>> a = MyClass()
>>> dir(a)
['__doc__', '__module__', 'method_a', 'method_b', 'method_c']
>>> a.method_a('hello world')
a: hello world
>>> a.method_c()
c这对我很有效。
发布于 2012-02-06 16:06:20
例如,典型的操作可能包括以只对BigStructure对象有意义的方式遍历大型结构实例。
也许您可以编写一些生成器作为BigStructure的方法,以完成繁琐的遍历工作。然后,OperationsOnBigStructure可以在执行任务时循环遍历迭代器,这可能会提高代码的可读性。
因此,通过使用两个类而不是一个类,您可以在两个阶段提升抽象级别。
https://stackoverflow.com/questions/9155618
复制相似问题