我有大量的对象,我需要能够对每个对象做一些复杂的事情,所以我有一些相当长的函数。
一般来说,将长函数放入实际用于它们的类(GreatObject,下面)以进行适当的封装是更好,还是将一个函数放在集合类中(GreatSet,它只有一个实例)是否更好?
class GreatSet(object):
def __init__(self):
self.great_set = [] # Will contain a lot of GreatObjects.
def long_method(self, great_object): # Is this function better here?
[Many lines of code]
class GreatObject(object):
def __init__(self, params):
self.params = params
def.long_method(self): # Or here?
[Many lines of code]我正在使用Python2.7。
发布于 2017-01-12 13:40:56
在这两种情况下,long_method都属于它的类(每个类只有一个long_method函数,由所有实例共享),在这两种情况下,查找obj.long_method都会为每次查找创建一个新的Method实例,所以wrt/“效率”(不管它的意思是什么)不会有任何区别。此外,除非您需要最大的时间和空间性能--在这种情况下,低级语言可能是最好的选择--您确实应该更关心正确的设计和可维护性,而不是最大的原始性能。
因此,如果long_method应该在GreatObject上工作,那么它可能属于GreatObject,但它取决于这些类各自的响应性、long_method真正做什么以及long_method、GreatObject和GreatSet属于哪个应用层。例如,如果GreatObject和GreatSet都属于域模型,而long_method做与表示相关的事情,那么显然long_method既不属于GreatObject,也不属于GreatSet。
最后,正如PartialOrder在他的评论中提到的那样,“长”函数通常是一种代码/设计气味。有时,函数必须“足够长”,因为它做了一些复杂的事情--即使这样,通常也可以将其重构为较小的函数(如果这些函数需要共享状态,最终可以重构为不同类的方法) -,但通常长函数意味着它只是做了太多的事情。
https://stackoverflow.com/questions/41613901
复制相似问题