設計の疑問が解消!?
今日本を読んでいて、「なるほど!そうすりゃ良かったんだ!」という小さな気付きを得ました。
- プログラムはデータを変えるもの
- UNIXシェルのパイプラインのように、単純な機能をつなげて複雑な処理を実現
当たり前といえば当たり前で、別に普通のことですが、改めて考えてみると、「自分に足りなかったパズルのピースだった!」とひらめきました。
迷宮になるコード
プログラムを設計して、コードを書いて実装すると、最初は調子が良いのですが、コード量が多くなってくると段々コーディングのスピードが落ちてきます。
最初の頃の半分以下のスピードになってくると「何でこんなに生産性が下がるんだろう?」と悩みます。
自分のコードを振り返ると、モノシリック(1枚岩)な大きいファイル、モジュール、クラス、関数を作る傾向がありました。
作れば作るほど、どんどんゴチャゴチャになっていき、見通しが悪くなっていたのです。
このゴチャゴチャ感を解消できれば、常にスッキリして、最初も途中も最後も同じペースでコーディングできるはずだと思いました。
改善方法
で、このゴチャゴチャをスッキリさせるのが(冒頭の)「気付き」でした。
- 大きくて複雑なモジュールは、小さくてシンプルなモジュールに分割する。
- 十分にテストされた信頼できる小さなモジュールを作る。
- (UNIXシェルのパイプラインのように)単機能の小モジュールを組み合わせて、大きな処理を作る。
- 大量のモジュールを一覧できる機能が必要。把握しやすくする。
- 常に一覧が見られれば、ファイルやモジュールの置き場所は自由。(Amazonの倉庫のように、商品はどの棚にあっても、検索すればすぐ見つけられるかんじ)
物理設計の方針
具体的には、CodeIgniter(MVCフレームワーク)を使ったWebアプリの設計で、
- モデル:DBアクセスが発生する処理を置く。
- ライブラリー:DBアクセスが発生しない処理を置く。
- ヘルパー:その他の処理。すぐに呼び出せるように関数として用意する。
というかんじで分割してみる。
論理的な分割はドメインで分割すれば良いだろうけど、物理的な分割は見やすくすること(一覧性)を意識しようと思いました。
この一覧性を良くするにはどうすれば良いか?
他人のやり方を参考にして、自分がやりやすいやり方を編み出してみたいです。
プログラミングと整理整頓能力
こうして考えると、部屋の片付けとか、物事をスッキリさせる能力があれば、プログラミングもスッキリさせられるのではないか?と思います。
ゴチャゴチャした部屋を綺麗に片付けて、どこに何があるかハッキリさせる。
必要なものがどこにあるのかすぐに分かり、パッと取り出せたら便利ですよね?
部屋や倉庫を綺麗に整理整頓するイメージで、物理的な設計を改善していきたいと思います。