我编写了一个包含多个类的 Python 应用程序。假设其中一个是这样的(过于简单了 - 但我试图表示功能的类型):
class PythonXyz(object):
def __init__(self):
self.x = []
self.y = []
self.z = []
def append(self, x, y):
self.x.append(x)
self.y.append(y)
def get_x(self):
return self.x
def get_y(self):
return self.y
def get_z(self):
return self.x + self.y
def size(self):
return len(self.x)
def dump(self):
#generate some output
def do_some_complex_stuff(self, q):
#lots of calculations and manipulation of the self.x and self.y lists.
def save(self, filename):
#some code that saves data to disk
def load(self, filename):
#some code that loads data from disk
当应用程序工作,但缺乏可用性时,我决定对应用程序进行 djangofy,这样我就可以将浏览器用作穷人的 GUI 并使用数据库的优点。所以我像这样制作了一个model.py:
class DjangoXyzModel(models.model):
x = models.FloatField()
y = models.FloatField()
我修改了 PythonXYZ 类中的 load() 和 save() 方法以使用数据库而不是文件,并使一些视图可以通过浏览器工作。
现在我得到了 3 个 Django 应用程序,[编辑]具有不同的数据库模式 [/编辑],每个都有自己的 models.py 文件和几个模型类,此外,我的原始代码在一个单独的文件夹中。我觉得这一切都变得非常混乱,我觉得将所有 PythonXyz 方法完全集成到 DjangoXyzModel 类中会更加简洁,例如:
class DjangoXyzModel(models.model):
x_db = models.FloatField()
y_db = models.FloatField()
def init_lists(self):
self.x = []
self.y = []
self.z = []
def append(self, x, y):
self.x.append(x)
self.y.append(y)
def get_x(self):
return self.x
def get_y(self):
return self.y
def get_z(self):
return self.x + self.y
def size(self):
return len(self.x)
def dump(self):
#generate some output
def do_some_complex_stuff(self, q):
#lots of calculations and manipulation of the self.x and self.y lists.
def save_to_db(self):
#some code that saves x,y lists to the database
def load_from_db(self, filename):
#some code that loads x,y lists from the database
我的问题是:这种方法是否会被视为 Django 模型类的“污染”,或者这是否可以,只是个人喜好问题,或者这可能正是模型类应该使用的方式?如果不推荐或不赞成这样做,那么处理重复课程的更好方法是什么?
请注意,显而易见的(?)解决方案完全摆脱列表并直接从数据库中工作是不可接受的,因为我需要内存中的列表以便更快地访问。例如,列表从数据库加载到内存中一次并被访问数百或数千次。每个列表可能超过 1000 个项目,因此在需要值时批量读/写也比单独访问快得多(通常不是顺序的)。此外,在最终提交到数据库之前,通常会多次修改数据。