Django模型与面向对象设计
我为一个在线游戏写了一个任务系统。我的任务数据被转成了 json 对象
,然后通过一个 JavaScript 客户端从 REST 后端(我使用的是 Django RestFramework)获取这些任务。
现在我在想,应该把和数据相关的“行为”放在哪个 类
或 django 模型
里。
我把和任务相关的数据存储在几个不同的模型里:一个叫 QuestHistory
的模型,里面有一些字段,比如 Boolean completed
(表示是否完成)和 Datetime started
(表示开始时间),这些信息是特定用户的(还有一个用户字段)。
然后我有一个 QuestTemplate
模型:这个部分是永远不变的,字段包括 quest_title
(任务标题)和 quest_description
(任务描述)。
我还有一个 Rewards
模型,以及 Task
和 TaskHistory
模型,它们通过一个 foreign Key field
(外键字段)与任务关联。
为了把这些信息组合回任务里,我创建了一个纯 Python 的 Quest(object):
类,并在这个类上定义了一些方法,比如 check_quest_completion
(检查任务完成情况)。这个类最后会被序列化。这个方法的问题是,它变得相当冗长,比如在我实例化这个类或者定义序列化器的时候。
有没有什么 Python 或 Django 的“捷径”,可以把一个 django 模型
的所有字段放到另一个类(在这里是我的 Quest 类)里?可能类似于 dict.update
方法?
或者我应该尝试把方法放在 models
里,而不使用 Quest class
呢?
我在游戏里还有其他地方的结构和任务系统很相似,比如库存系统,所以我希望能找到一个更优雅的解决方案。
1 个回答
你应该把Quest类里面的方法放到模型本身上,然后把Quest类去掉。