djangoでのビジネスロジックとデータアクセスの分離

| | | | | |

Djangoでプロジェクトを作成していますが、コードの80%が models.pyファイルに含まれていることがわかります。このコードは紛らわしく、しばらくすると、実際に何が起こっているのか理解できなくなります。

気になる点は次のとおりです。

  1. モデルが醜いです。レベル(データベースからのデータの処理のみを担当することになっていた)も、電子メールの送信、他のサービスへのAPIのウォークなどを行っています。
  2. また、ビジネスロジックをに配置することは受け入れられません。このように制御するのが難しくなるので、ビュー。たとえば、私のアプリケーションでは、 User の新しいインスタンスを作成する方法が少なくとも3つありますが、技術的にはそれらを均一に作成する必要があります。
  3. モデルのプロパティが非決定的になり、副作用が発生した場合。

これは簡単な例です。当初、 Userモデルは次のようでした。

  class User(db.Models):def get_present_name(self):returnself.nameまたは"Anonymous" def activate(self):self.status = "activate" self.save() 

時間の経過とともに、次のようになりました。

  class User(db .Models):def get_present_name(self):#プロパティがデータベースに関して非決定的になりました#データはapiによって別のサービスから取得されますreturn remote_api.request_user_name(self.uid)または "Anonymous" def activate(self):#メソッド副作用があります(ユーザーにメッセージを送信します)self.status = "activate" self.save()send_mail( "アカウントがアクティブ化されました!"、 "、Ķ"、[self.email]) 

コード内のエンティティを分離する必要があります:

  1. データベースのエンティティ、永続性レベル:アプリケーションはどのデータを保持しますか?
  2. アプリケーションのエンティティ、ビジネスロジックレベル:アプリケーションは何をしますか?

そのようなを実装するためのグッドプラクティスは何ですかn Djangoで適用できるアプローチ?