我正在用 Django 編寫一個項目,我發現 80% 的代碼都在文件 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): # 屬性在數據庫方面變得不確定 # 數據由 api 從另一個服務獲取 return remote_api.request_user_name(self.uid) 或“匿名” def activate(self): # 方法現在有一個副作用(向用戶發送消息) self.status = "activated" self.save() send_mail("您的帳戶已激活!", "‚Ķ", [self.email])
我想要在我的代碼中分離實體:
- 我的數據庫的實體,持久性級別:我的應用程序保留哪些數據?
- 我的應用程序的實體,業務邏輯級別:我的應用程序做什麼?
實施這種django中可以應用的方法?