Djangoはアプリケーションアーキテクチャ設計が重要そうね
とりあえず何作ろうか悩んで一歩も動けないのも考え物なので、一応チュートリアルを参照しつつ手を動かしている。
まだまだ途中だけど。
今作っているのはpart4でViewまで到達しているわけだけど、やっぱりアプリケーションアーキテクチャをきちんと定義しないといけないんだろうなーというのはすでに現時点で感じている。
Djangoでは永続化としてPoEAAでいうところのActiveRecordを採用しているわけだけど、ここでも言われている通りで実装に混乱が起きやすいのはある程度の開発経験を持っている人なら同意してもらえると思う。
特に複数モデルにまたがるトランザクションを解決しようとすると、アプリケーションアーキテクチャとしてかっちり遵守させるような仕掛けを施さないとすぐに崩れてメンテ不能になるのは目に見えてる。
これはルール作りではカバーしきれない。こりゃもう断言していい。
特に大規模システム開発/保守だと、まともにコーディング規約すら守れないような脳みそあんこちゃんまで紛れ込むので、仕掛けを守らないとまともに動かないようにしておかないと後で大変なことになる。
人間というのはコンピュータと違って勝手な判断をして、ブツが動いたらそれで満足してしまったりする生き物だし、悪い意味で怠惰になって「勉強する気ないから」と言い放ってチームを道連れにアーキテクチャガン無視して非効率なメンテ強行するPMも存在するくらいだかんね。
で、Java+SpringだとAOPによるトランザクション管理によってDAOは単一モデルのCRUDに専念でき、複数のモデルがからむ処理に関してはControllerで処理を行い、トランザクション境界はServiceに置いて動的にトランザクションをまとめるという階層化が自然にできる。まあ強制できてるかと言われれば微妙なところだとは思うけど。
で、現状Djangoにはそういう道具立てがないように(今のところは)見える。
ないからやらなくていいかって?いやいや御冗談を。
とりあえず上記に類似したレイヤーで作っていこうとは思っているけど、Djangoでどう縛るかはこれから考えないといかんのよね。
はてさてどうなるものやら。
でもとりあえず大規模開発の文脈で言えば「Javaオワコン」と安易に言ってしまうのには少し抵抗がある。
少なくともここら辺の問題が解消できる言語やフレームワークが登場するまでは。