感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Magic Servlet(アンチ)パターンとCommandを使うということ。

スポンサーリンク

サーバーサイドJavaアンチパターンの本を読んだときもメモなど。
古い本だけど、コマンドで処理を包む部分とか参考にしたい。
メモ的な記事。

Magic Servletパターン

サーバサイドJavaでもっともよく見られるアンチパターンがMagic Servletパターンのようだ。
Magic SevletパターンというのはいわゆるModel View Controllerに従わないパターンで、コントローラの中にモデルのロジックが入っていたり、モデルの中にビューのロジックが入ったりするのがいわゆるアンチパターンである。

中でも、このMagic Servletというのは、Servletの中になんでも詰め込んでしまうパターンのことだ。

public void doPost(HttpServletRequest req, HttpServletResponse res) 
					throws ServletException, IOException {
	//この中にビューとかモデルのロジックを詰め込んでしまう!!
}

こうやってしまうと、プログラマーとデザイナの役割分担をすることはできないし、Javaのコードをデザイナーが見なければいけなくなってしまう。
この本が出版されたのは2003年。
今ではこんなアンチパターンをやってるプロジェクトはほとんど無いかと思うが、昔はたくさんあったに違いない。
本の中では、Magic Servletの原因を以下のように書いている。

  • 経験不足
  • Perlの書き直し
  • 移植性の悪いパターンを移植した
  • ツールの力不足

なんだか当たり前な原因分析で腑に落ちないが、まぁ、これはいい。

学ぶべき点は解決策で、この本では解決策にCommandパターンを紹介している。
Commandパターンというのは、モデルとして機能する命令をセットにしたものである。

なんて書いてあるが、要は妥当なリクエストをサーブレットが受け止めて、そのリクエストに応じた処理をコントローラ側で包み込むということだと思う。
本の中では、「コマンドはモデルを包む薄い層」と言われている。
おそらく、サーブレットとモデルのインターフェースのように使い、文字通り「命令の集合体」として使うはずだ。
そうか!モデル(Model)のメソッドは、サーブレットでは叩かないで、Commandの部分で叩くんだ。

では、サーブレットでリクエストを解析するロジックを入れて、
→それに応じたコマンドクラスを用意する。

コマンドから、モデルが持つメソッドを実行する。
という感じになるのかな。
コマンドクラスは、initialize()やexecute()といったメソッドを持つ。

あと、この本ではJSPをビューとして扱ってたけど、今ならJSPは使わないで、RESTっぽくJSONでやり取りすると思う。JSPを使うと、どーーしてもモデルとビューが結合してしまうから。

読んだ本

感謝のプログラミング

今回で感謝のプログラミングは【642時間目】
10000時間まで、あと【9358時間】