Djangoへの移行作業で、VisualStudioのサンプルコードを参考に開発を始めたので、アプリケーションの主なソース構成はいわゆるMVCパターンで以下となっていた。
層 | ソースファイル | 備考 |
V:ビュー | app/templates/ | |
C:コントローラー | app/views.py | |
M:モデル | app/models.py app/managers.py | DBデータの定義 Managerの拡張クラス。 |
移行するシステムは、それなりに大きくて、上記構成では各ファイルが大きくなってきて、分かりにくくなってきた。そこで、構成を見直した。
新しい構成としては、以下のようにしてみた。
階層 | ソースファイル | 備考 |
V:ビュー | app/templates/ | |
C:コントローラー | app/views.py | クラスビューを定義 |
C:コントローラー | app/contorollers.py | リクエストに応じて、プロシージャやサービスを呼び出す。 |
BP:プロシージャ | app/procedures.py | サービスをシーケンス呼び出しする手順 |
BS:サービス | app/services.py | ここがいわゆるビジネスロジック。ここが大きくなりそうなら、ディレクトリにしてファイル分割する。 |
DP:データプロバイダー | app/providers.py | データへのアクセスを提供。SpringでいうRepositoryの位置づけ。 Model,Managerにはここからアクセスする。 |
M:モデル | app/models.py | DBデータの定義 |
Managerの拡張クラスを使わなくした理由は、個人的にDjangoのModelとMangerの関係が、Mangerに処理を定義していくと、Modelとの相互参照の問題も出てくるという作りがどうも好きになれないので。相互参照を避けるための方法は提供されているが・・・。
上記の構成にするため、簡単なフレームワークを作成した。まだ直さないといけない部分はあるが、とりあえずは、この方針で進めてみる。