個人でシステムを作ってみて思ったこと
技術の勉強って結局は学ぶという姿勢が整ってないと何も身につかなくて、なおかつ学ぶという姿勢はどのように育まれるかというと、結局「いざ使用するとき」「壁にぶちあたったとき」にならん限りは八割がた生まれんという持論を振りかざして生きてきました。
故にってわけではないですけれど、いろいろと技術を勉強するにあたって、技術系のサイトやら勉強系のサイトやら見るよりもまず自分でその瞬間を作ってみようということで、自分でシステムをちまちま組んでました。
ウィザードリィとかキャラメイク系のゲームあるじゃないですか。アレに似た関係で、アトラスの「世界樹の迷宮」シリーズのキャラメイク管理用のシステムを作ってみました。
認証は独自実装のためMembershipProvider使わず。荒らそうと思えばいくらでも荒らせる作りになっててアレなんですけどまあ使う人なんて身内くらいしかいないかなということで気にせず実装。
そんでもってようやくタイトルに沿った内容に入ります。以下箇条書き
・設計大事。超大事。
当たり前すぎるけれども実際に自分で1から全部組んでみて実感した。
いやもうほんと設計九割なんじゃないかってレベルで大事。仕様とも言うべきものは自分の頭の中にあって全部書き出したつもりだったんだけれども、いざ実装段階になると、一つ一つの機能としては問題なくとも連携すると大変なことになるとか多かった。特にViewModelの設計。
想像力が欠如していると言えばそれまでなんだけれども、でも実際にやってみないとどうにもわからないことが多すぎた。結局はSession変数に頼りまくるRestとは程遠い形となってしまいました。
この辺は経験で補うしかないのか。と、思ってますが、勉強することで少しはマシになるものがあればそれを学んでみたいとも考えてます。何について学べばいいだろ。ドメイン駆動?
・MVCのあり方について
MVCフレームワークに始めて触れたのが前職だったのですが、MVCのなんたるやの概要をほぼ学ばず実装から始めたので、イマイチな独自MVCフレームワークを自分で作って実装しました。
色々と意識できてないところはあるんだけども、一番意識できてなかったのは下位層は上位層を知っていてはならないというところ。(レイヤーアーキテクチャだっけ?)
ControllerはControllerという層、ViewはViewという層といった形にしか捉えきれていなかったので、あっちこっち参照しまくりのお前本当にMVCか?という形になりかけました。一応、なんとかそれっぽい形に落ち着けはしましたが。
アーキテクト的な考えになるのかもしれないのですが、やっぱりそのへん知ってないと修正時にゴチャついてなんとも言えないゴミクズが出来上がるというのは実感しました。
実際に組んでみるのも大事ですが、やっぱり概念的なものを捉えてないとうまいこと動くものは作れないと感じました。
この辺はしばしば議論されててスライドもよく挙げられてるので、そのへんからちょいちょい吸収していきたいところ。
ぜい肉のないコントローラーをめざそう ASP.NET MVC
この辺はmiso先生のブログとかスライドとかに書かれてる内容を特に意識して勉強中です。心の師匠。
・テストコードは思った以上に時間がかかる
さっきから当たり前のことしか書いてないけれど実際自分で体験してみないと実感として身体に埋め込まれないんですよね。
テストコード、というより、テストコードを実装できるようなモデル設計、というべきか。テスト自体書いててクソ楽しいのでいくらでも書いてやるよみたいな気持ちで取り組んだのですが、いざやってみると面倒だし何より前述した通り設計グデグデなのでまずリファクタリングしてからテストしなければならなくてやる気が失せたり、ほかにも実装すべきところがあるのにテストから取り組むのどうよって気持ちになったり、どうせ趣味プログラミングだからいいじゃんって気持ちになったり。
やらない理由しか上げられないのですが、時間がかかるとわかってることには人間なんとも手が出しにくいもんだ。こんなことなら最初っからTDDで取り組んで見積もり日数もっと取っとけばよかったなあと後悔です。最初はテスト時間込の見積もりだったんだ……。
この辺は見積もりの話も込みだし、人月の神話とか読んどくべきかなあと思ってます。
・Session変数の扱いについて
というかSession.Timeoutの話が殆ど。
アレConfigファイルにTimeoutの時間書いてたらその通りの時間でTimeoutすると思ってたんですけど、試してみたらデフォルトの20分で切られました。
レンタルサーバーなのでIISの設定は見られないので、サーバーの問題だったらお手上げです。でもアプリケーションの設定が優先されるはずなので関係ないと思うんだけれどなあ……。
この問題については依然悩み中。
こんなもんかなあ。
結局のところ、いかんせん経験と基礎知識が足りてないので、個人システムでもいいから量産してみてうまいとこ落としどころ見つけたいもんです。
特に今の状態だとIoCコンテナがただいるだけみたいな状態になってるので、テストコードだけでも使えるような設計を考えられるようにしたいところ。
やっぱりまだまだ勉強足りてないねえ。