こんにちは、システム担当の林です。
今週に入って冷え込みが一段と厳しくなってきましたね。
僕はとかく寒がりなもので、会社にはもちろん暖房は入っているのですが
足下が冷えるので、ユニクロで買ったブランケットを愛用しています。
皆様は風邪など引かれていませんでしょうか。
さて、金の知恵の方はすでにパイロット版を公開していますが、
今月24日のリリースに向けた、社内用レビュー版を昨日ようやくアップしました。
(正確に言うともうちょっと調整が必要でこれからとりかかりますが。。。)
だいぶ追い込み作業が立て込んでて、大変なのですが
あともう一息気合い入れていきたいなと思っております。
で、今日の本題は何にしようかと思ったのですが
金の知恵開発にあたり、一番悩んだ部分である、モジュールの設計の話を。
symfonyでは、Webアプリケーションの機能単位に「モジュール」に分割しますが
実際に設計をしてみると、どの単位でモジュールに分割すべきか、というのに結構悩みます。
また、何を「モジュール」にして何を「アクション」にするか、というあたりでも葛藤があり。
そんな風にちょっと考えが煮詰まった時、僕が常に意識しているのは
タイトルにある「KISS」という原則。
シンプルさを保て、ってことですね。
例えば、先ほどのモジュールとアクションの役割については
アプリケーションの機能を『【A】を【B】する』と捕らえて、
Aに当たるもの(名詞・目的語)をモジュール、Bに当たる動詞をアクションとして構成します。
「会員」を「登録する」で、モジュール:member、アクション:register
「知恵」を「閲覧する」で、モジュール:knowledge、アクション:show
「知恵」を「投稿する」で、モジュール:knowledge、アクション:add
※「投稿する」は、"post"なんですが、これはHTTPリクエストのメソッドと紛らわしいので避けました。
ここまではわかりやすいのですが、
例えば「会員のポイント履歴を表示する」という機能の場合。
当初の設計では、member モジュールに、pointLog というアクションを作っていたのですが
これがどうにもしっくりこなくて(pointLogって動詞じゃないですからね)、
しかもmemberモジュールが肥大化していたこともあり
ここを「ポイント履歴」を「表示する」と考えて、
pointLogモジュールを新たに作成し、showアクションで処理することにしました。
こうすることで、モジュールとアクションの関係が明確になるとともに
memberモジュールを「登録」「修正」「削除」「閲覧」という基本のアクション(動詞)だけに
することができ、だいぶ見通しがよくなったかなと思います。
symfonyに限らず、設計で迷った際には、1つ核になる原則を決めておくと
道が開けるんじゃないかな、と思っています。
それではまた。