#140:コードをダイエット

今日のタスクはソースコードを簡潔に分かりやすい構成にすること。分かりやすいというのは一つのファイルに何でも詰め込むのではなく機能ごとに分散させるという意味で用いている。コードにダイエットさせるとも言える。確かJSのフレームワークにコンポーネントという言葉があったがそれに近いイメージだ(間違ってたらスマン)。ReactはProgateしかやったことないから……。

Javaといえばオブジェクト指向言語なので思想からしてソースコードの役割を分けるように考えられている。その代表的なインターフェイスや抽象クラスなどの概要は覚えているがイマイチ使い勝手が分からないので試しに使ってみた。しかし、何かしっくりこない。こういうのは大規模開発みたいな現場で見てみないことには使いこなせるイメージが湧かないし、いまいちメリットが飲み込めない。という訳で方針転換。せっかくサーブレットを使っているのだから重複しているコードは全てフィルターでURLを指定して削減した。どこまで機能拡張するかの判断が難しいから今まではフィルターを使おうとはなかなか思えなかった。が、案外気楽に使っても良さそうだったし、下記のようなリクエストハンドラが豊富にあることも知ってれば尚更使いたくなっただろう。

// コンマで複数指定可能
// アスタリスクは全てのスラッグを対象にする(ワイルドカード?)
@WebFilter(urlPatterns={"/index.html", "/ideas/*"})

// サーブレット名で指定
@WebFilter(servletNames={"IdeasIndexServlet", "MembersIndexServlet"})

// 指定したURLのリクエスト時に適用
@WebFilter(urlPatterns={"/index.html"}, dispatcherTypes={DispatcherType.REQUEST})

// 指定したURLのフォワード時に適用
@WebFilter(urlPatterns={"/index.html"}, dispatcherTypes={DispatcherType.FORWARD})

// 指定したURLのインクルード(サーブレット内に別のサーブレットを挿入して処理)時に適用
@WebFilter(urlPatterns={"/index.html"}, dispatcherTypes={DispatcherType.INCLUDE})

// 指定したURLのエラー検出時(ページ遷移)に適用
@WebFilter(urlPatterns={"/index.html"}, dispatcherTypes={DispatcherType.ERROR})

次にJSPのコードを修正。長いもので600行ぐらいあるから流石にそれじゃ管理しにくかろうということでc:importタグを活用した。それぞれの部品ごとに分割したから全体的なソースコードの記述量は殆ど変わっていない。ただ、ファイルが機能や部品ごとに分かれたおかげで管理しやすくなったと思う。特にトーストメッセージやフラッシュメッセージの条件分岐ね。後、なんか他のフォルダのパスが通らなかったりしたんだけどあれって仕様かな?おかしいわ……。更にもう一つ気になったのがc:ifタグでURLを利用した条件分岐をやりたいんだけど上手くいかないというね。それが出来ればもっとコードの削減が出来るんだけどな。気になるけども、JSPにのめり込んでも仕方ない。一先ず飛ばそう。

今日のIssueはこちら。1日1Issueこなしていきたい。が、明日は用事があるので早速駄目そうだorz。

To comment

@Contents
閉じる