django中業務邏輯和數據訪問的分離

| | | | | | | | | | | | | | | | | |

我正在用 Django 編寫一個項目,我發現 80% 的代碼都在文件 models.py 中。這段代碼令人困惑,過了一段時間後,我不再明白到底發生了什麼。

這是困擾我的地方:

  1. 我覺得我的模型很難看級別(應該只負責處理來自數據庫的數據)也在發送電子郵件,通過 API 訪問其他服務等。
  2. 此外,我發現將業務邏輯放入其中是不可接受的視圖,因為這種方式變得難以控制。例如,在我的應用程序中,至少有三種方法可以創建 User 的新實例,但從技術上講,它應該統一創建它們。
  3. 我並不總是注意到這些方法和我的模型的屬性變得不確定,並且當它們產生副作用時。

這是一個簡單的例子。一開始,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): # 屬性在數據庫方面變得不確定 # 數據由 api 從另一個服務獲取 return remote_api.request_user_name(self.uid) 或“匿名” def activate(self): # 方法現在有一個副作用(向用戶發送消息) self.status = "activated" self.save() send_mail("您的帳戶已激活!", "‚Ķ", [self.email]) 

我想要在我的代碼中分離實體:

  1. 我的數據庫的實體,持久性級別:我的應用程序保留哪些數據?
  2. 我的應用程序的實體,業務邏輯級別:我的應用程序做什麼?

實施這種django中可以應用的方法?