1.必ずデザインモードを使う


1.必ずデザインモードを使う


1. Spring MVC


MVC
  • モデル,View,Controllerの弱者,モデルロール,ビューロール,コントローラロールのクラスはそれぞれ開発したモデルを作成する.
  • ビュー:結果を表示または入力するための画面、イベント、イベントの結果を表示します.
  • コントローラ:ビューとモデルの接続者.ビューで受信したイベントをモデルに接続します.
  • モデル:ビューに入力された内容を保存、管理、および変更するために使用されます.これは活動に対して実事を行う部分です.
  • JSPモデル1
  • JSPモデル1は、JSPでjavabeanを呼び出し、データベースで情報を問合せ、登録、変更、削除し、結果をブラウザに送信する方法である.
  • は開発が容易であるという利点があるが,開発後にプロセス変更が発生した場合に修正が困難であるという欠点がある.
  • のもっと大きな問題は、このような構造を採用して開発すると、スクリーンとビジネスモデルの分業が小さいため、コードは開発者の能力によって大きく変化することです.また,このモデルはコントローラがないためMVCモデルとは言い難い.
  • JSPモデル2
  • JSPモデル1の欠点を解決するために提案されたモデル.JSPモデル2はMVCモデルに完全に従う.
  • JSPを直接使用してリクエストを行うJSPモデル1との最大の違いは、Subletを使用してリクエストを行うことである.モデル2では、サーブレットがコントローラとして機能する.
  • 2.J 2 EEデザインモデルとは?


    デザインモード
  • システムを作成するには、すべての有意義なクラスセットを設計モードと見なすことができる.誰もが話せるパターンになるように、繰り返しの意味のある集合を定義し、名前を付けました.

  • この図は、ユーザの要求処理の手順に従って、上から下まで見ればよい.一番上はプレゼンテーション、真ん中はビジネス原稿、下はプレゼンテーションです.画面に近づくにつれ、DBなどのリポジトリに近づく.各パターンの特徴を簡単に理解するには、次のようにします.
  • Intercepting Filterモード:要求タイプの結果に応じて異なる処理を行うモード.
  • Front Controlモード:要求の前後で処理するコントローラのモードを指定します.
  • ViewHelperモード:プレゼンテーションロジックに関係のないビジネスロジックをHelperのモードとして指定します.
  • ComponentViewモード:最小単位のサブアセンブリを分離するためのモード.
  • Service to Workerモード:Front ControlとView Helperの間にDispatchの組み合わせを配置するモード.
  • Dispatcher Viewモード:Front ControlとView Helperを使用してDispatcherコンポーネントを形成します.その他のアクティビティは、サービスto Workerモードとは異なり、ビュー処理が終了するまで遅延します.
  • 商業道徳モデル:商業サービス方法をカプセル化するモデル.
  • Service Locatorモード:サービスとコンポーネントの検索が容易なモード.
  • Session Facadeモード:ビジネス・コンポーネントをカプセル化し、リモート・クライアントからアクセス可能なサービスを提供します.
  • 複合ソリッドモード:ローカルソリッド空とPOJOを使用して大単位ソリッドオブジェクトを実現します.
  • Transfer Objectモード:通称Value Objectモード.データを転送するオブジェクトのモード.
  • Transfer Object Assemblerモード:1つのTransfer Objectですべてのタイプのデータを処理できないため、複数のTransfer Objectまたは変形を生成するオブジェクトを組み合わせて使用するモード.
  • Value List Handlerモード:データ問合せの処理、結果の一時保存、結果セットの選択により必要な項目を選択します.
  • データアクセスオブジェクトモード:よく知られているDAO.データベースへのアクセスを担当するクラスが抽象化され、カプセル化されます.
  • サービスアクターモード:非同期呼び出しを処理するためのモード.


  • ここでは、Service to WorkerモードとDispatcher Viewモードの意味が似ており、混同される可能性があります.クラス図から見ると、以下の違いがあります.
    上記のグラフから、Dispatcher Viewモードの違いは、Helperクラスを直接制御しないことです.
    パフォーマンスに関連するモードはどれですか?モードはいずれも直接または間接の性能と管理モードであり、J 2 EEモードの中で最も性能に密接なモードはService Locatorモードである.また、パフォーマンスに直接影響するわけではありませんが、アプリケーション開発時に使用しなければならないトランスポートオブジェクトモードも考慮する必要があります.
    少なくとも、上記のモードのビジネス詳細、セッション接続、データアクセスObect、Service Locator、Transfer Objectモードについて理解する必要があります.パフォーマンスに関連するTransferオブジェクトとService Locatorモードについて説明します.

    3.Transferオブジェクトモード


    Value Objectと呼ばれるトランスポートオブジェクトは、データを転送するためのオブジェクトのモードである.まずTransfer Objectのサンプルソースコードを確認します.
    package com.perf.pattern;
    
    import java.io.Serializable;
    
    public class EmployeeTO implements Serializable {
      private String empName;
      private String empID;
      private String empPhone;
      
      public EmployeeTO() {
        super();
      }
      
      public EmployeeTO(String empName, String empID, String empPhone) {
        this.empName = empName;
        this.empID = empID;
        this.empPhone = empPhone;
      }
    
      public String getEmpName() {
        if(empName==null) return "";
        else return empName;
      }
    
      public void setEmpName(String empName) {
        this.empName = empName;
      }
    
      public String getEmpID() {
        return empID;
      }
    
      public void setEmpID(String empID) {
        this.empID = empID;
      }
    
      public String getEmpPhone() {
        return empPhone;
      }
    
      public void setEmpPhone(String empPhone) {
        this.empPhone = empPhone;
      }
    
      @Override
      public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("empName=").append(empName).append("empID=").append(empID)
            .append( " empPhone=").append(empPhone);
        return sb.toString();
      }
    }
  • トランスポートオブジェクトモードは、トランスポートオブジェクトを作成し、複数のタイプの値を1つのオブジェクトに渡す役割を果たす.
  • Transferオブジェクトを使用する場合、フィールドをプライベートに指定してgetter()メソッドとsetter()メソッドを作成するか、共通に作成するメソッドを指定しないかは正解ではありませんが、パフォーマンス上はgetter()とsetter()を作成しないほうが速いです.ただし、情報を非表示にし、すべてのフィールドの値を任意に変更することを許可しない場合は、通常、上記のコードに示すように、各getter()、setter()メソッドを記述する必要があります.
  • さらに、各setter()およびgetter()はeclipseおよび他の開発ツールによって自動的に生成され、これは不便なことではありません.
  • およびgetter()メソッドまたはsetter()メソッドは、getEmpName()メソッドのように長さ0のStringを返すことができ、empName値が空であってもnullは返されません.すなわち、良好なトランスポートオブジェクトを作成すると、ソースごとにnullチェックを行う必要がなくなり、開発時にかえって便利になります.
  • トランスポートオブジェクトを作成する場合は、toString()メソッドを実装する必要があります.この方法を実装せずにtoString()メソッドを使用する場合、com.perf.pattern.EmployEETo@c1716不明な値を返します.後でJUnitでテストを行う場合は、値を比較したり、データを表示したりするときに便利です.
  • のシリアル化は、オブジェクトをシリアル化することができる.すなわち,サーバ間のデータ転送が可能となる.したがって、このインタフェースは、リモート・サーバにデータを転送したり、ファイルにオブジェクトを保存したりするときに実装する必要があります.
  • では、このTransfer Obejctを使用するとパフォーマンスが向上しますか?このモードでは、アプリケーションのパフォーマンスを大幅に向上させることはできません.ただし、1つのオブジェクトに結果値を入力することで、2回または3回のリクエストの発生を減らすことができるので、このモードを推奨します.

    4.Service Locatorモード

    package com.perf.pattern;
    
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    import javax.naming.InitialContext;
    
    public class ServiceLocator {
    
      private InitialContext ic;
      private Map cache;
      private static ServiceLocator me;
    
      static {
        me = new ServiceLocator();
      }
    
      private ServiceLocator() {
        cache = Collections.synchronizedMap(new HashMap());
      }
    
      public InitialContext getInitialContext() throws Exception {
        try {
          if (ic == null) {
            ic = new InitialContext();
          }
        } catch (Exception e) {
            throw e;
        }
        return ic;
      }
    
      public static ServiceLocator getInstance() {
        return me;
      }
      // ... 지면상 생략
    }
    Service Locatorモードは、以前よく使用されていたEJBのホームオブジェクトとDBのDataSource(検索時)の応答速度を低減するために使用されます.上記のソースコードを簡単に見ると、cacheというmapオブジェクトにプライマリオブジェクトが見つかった結果を保存し、メモリでオブジェクトを検索して提供できます.オブジェクトがcacheというマッピングに含まれていない場合は、メモリで検索します.
    リファレンス
  • Javaパフォーマンスチューニングストーリー