Djangoでプロジェクトを作成していますが、コードの80%が models.py
ファイルに含まれていることがわかります。このコードは紛らわしく、しばらくすると、実際に何が起こっているのか理解できなくなります。
気になる点は次のとおりです。
- モデルが醜いです。レベル(データベースからのデータの処理のみを担当することになっていた)も、電子メールの送信、他のサービスへのAPIのウォークなどを行っています。
- また、ビジネスロジックをに配置することは受け入れられません。このように制御するのが難しくなるので、ビュー。たとえば、私のアプリケーションでは、
User
の新しいインスタンスを作成する方法が少なくとも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])
コード内のエンティティを分離する必要があります:
- データベースのエンティティ、永続性レベル:アプリケーションはどのデータを保持しますか?
- アプリケーションのエンティティ、ビジネスロジックレベル:アプリケーションは何をしますか?
そのようなを実装するためのグッドプラクティスは何ですかn Djangoで適用できるアプローチ?