为了账号安全,请及时绑定邮箱和手机立即绑定

django中业务逻辑和数据访问的分离

django中业务逻辑和数据访问的分离

呼啦一阵风 2019-11-04 14:18:50
我正在Django中编写一个项目,并且看到80%的代码在file中models.py。这段代码令人困惑,并且在一段时间之后,我不再了解实际发生的事情。这是困扰我的事情:我发现模型级别(应该只负责处理数据库中的数据)在发送电子邮件,使用API到其他服务等方面也很丑陋。另外,我发现在视图中放置业务逻辑也是不可接受的,因为这样很难控制。例如,在我的应用程序中,至少有三种方法来创建的新实例User,但从技术上讲,它应统一创建它们。我并不总是注意到模型的方法和属性何时变得不确定,以及何时出现副作用。这是一个简单的例子。首先,User模型是这样的:class User(db.Models):    def get_present_name(self):        return self.name or 'Anonymous'    def activate(self):        self.status = 'activated'        self.save()随着时间的流逝,它变成了:class User(db.Models):    def get_present_name(self):         # property became non-deterministic in terms of database        # data is taken from another service by api        return remote_api.request_user_name(self.uid) or 'Anonymous'     def activate(self):        # method now has a side effect (send message to user)        self.status = 'activated'        self.save()        send_mail('Your account is activated!', '…', [self.email])我想要的是在代码中分离实体:数据库级别的数据库实体:什么包含我的应用程序?我的应用程序的实体,业务逻辑级别:什么可以构成我的应用程序?有什么好的实践来实现可以在Django中应用的方法?
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 1302 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信