The top 10 (more or less) J2EE best practices

J2EEでのベストプラクティス集(10+2個)です。見出しを日本語で紹介します。(訳はいい加減です)

  1. 必ずMVCを使え:ビジネスロジックJava BeanとEJBコンポーネント)、コントローラロジック(サーブレットStrutsのAction)、プレゼンテーション(JSPXML/XSLT)をはっきり分けること。よいレイヤわけは七難隠す。
  2. 自動テストとテストハーネスをすべてのレイヤに適用せよ:GUIに対してだけテストしてはならない。レイヤごとのテストはデバッグとメンテナンスをずっとシンプルにする。
  3. 仕様に基づいて開発せよ、アプリケーションサーバに基づいてではなく:J2EEの仕様を心に刻み、よく検討してから逸脱する(アプリケーションサーバの独自機能を使う)こと。「できること」と「するべきこと」は違う。
  4. 初日からJ2EEセキュリティを使う計画を立てよ:EJBとURLを、少なくとも認証されたユーザにだけ公開すること。とにかくそうしなさい。
  5. 知っているものを作れ:反復型の開発によって、徐々にJ2EEの各部分をマスターすることができる。すべてをいっぺんに作るよりも、小さく垂直に分割して作るべし。
  6. EJBコンポーネントを使うときには、必ずセッション・ファサードにすること:どんなタイプのクライアントにも、EntityBeanを公開してはならない。EntityにはLocal Interfaceだけを使うこと。
  7. ステートフルSessionBeanではなく、ステートフルSessionBeanを使え:そうすれば、システムはフェイルオーバーを実現しやすくなる。ユーザーごとの状態を保持するにはHttpSessionを使うこと。
  8. コンテナ管理のトランザクションを使え:自分でトランザクション管理の仕組みを作るより、J2EEではどのように2フェーズコミットが働くのかを学び、信用しなさい。たいていの場合、コンテナのほうがトランザクションの最適化を上手にやる。
  9. プレゼンテーション技術の最初の選択としては、JSPを好むべし:XML/XSLTは、ひとつのコントローラとバックエンドで複数のプレゼンテーション出力タイプをサポートしなければならない場合にだけ使いなさい。
  10. HttpSessionを使うときには、現在のビジネストランザクションに必要な分だけの状態を保持すべし:セッションの永続化を可能にしなさい。
  11. WebSphereでは、ダイナミックキャッシュをONにして、WebSphereのサーブレットキャッシングメカニズムを使いなさい:パフォーマンスは大きく向上し、オーバーヘッドは最小限。プログラミングモデルには影響しない。
  12. プログラマの生産性向上のため、O/Rマッピング最初の候補としてCMP EntityBeanを好むべし:WebSphereのフレームワークを通じてパフォーマンスの最適化をはかるべし。パフォーマンスの目標を達成するために必要ならば、Fast-Lane readerのようなパターンを適用してもよい。

WebSpereの使用を前提にした記事のようですが、J2EE全体について言えることも多いですね。
CMP EntityBeanをO/Rマッピングに使うには、EJBQLなんかをマスターしないといけなくなってくるので、ちょっと敷居が高い(というか、「こんなんならSQL書かせてくれよ」と思ってしまう)気もしますが。