我想在django models.Manager
上重构一个非常大的方法。为了清楚起见(以及我的理智),我想将其分解为其组成部分。
此方法接受一个对象,使用该对象的信息加载网页,并根据该页面的内容从数据库中返回一个新的或现有的对象。
让我们假设我正在尝试获取与某个网页相对应的Vehicle
。除其他事项外,这可能涉及:
目前,方法签名可能如下所示:
class VehicleManager(models.Manager):
def getForSale(self, sale):
# lots and lots of code
我想将其分解为更小的方法,每个方法都执行上述要点之一。
我遇到的概念问题是我不确定在哪里放置较小的方法。它们似乎不属于VehicleManager
,因为:
Vehicle
个对象(例如,Vehicle.objects.findNameOnPage
是无意义的)我可以想出几种重构方法:
只需创建以下划线为前缀的新方法,例如:
def _findNameOnPage(self, page): # self is not used
这种方法的问题在于这些方法比真正的方法更具实用功能。
创建静态方法:
@staticmethod
def _findNameOnPage(page):
这会将方法与类(好)相关联,但这样做会混淆命名空间(坏)。
将方法放置为模块范围
这不会使命名空间混乱(好),但也使得方法与类(坏)相关联不太清楚。
在python中是否有可接受的模式/方法?