コアコードのクリーンアップ(第10章システム)


注目点の分離



構造(生成)と使用(使用)は違います。

  • ソフトウェアシステムは、準備プロセスを(準備プロセスの後に)実行時論理から分離しなければならない(アプリケーションオブジェクトを作成し、相互に依存する).
  • オブジェクトの作成と使用オブジェクトの部分を分けます.
  • 始まりへの興味を分離する


    オブジェクトの作成は開始段階で、ビジネスロジックはオブジェクトの使用に集中します。

  • 起動フェーズは、すべてのアプリケーションで解決する必要がある問題です.
  • main関数で、システムに必要なオブジェクトを作成し、アプリケーションに渡します.
  • アプリケーションでは、作成したオブジェクトのみが使用されます.
  • すべてのオブジェクトが良好に生成されたと仮定し,使用オブジェクトの開発に集中できる.

    要求に対する興味を分離する


    Springフレームワークにより、リクエストに対する興味を分離し、リクエストを処理するビジネスロジックに集中できます。



    Filter, Intercepter, AOP

  • サーバ・フィルタは、DispatcherServiceletの前に実行されます.要求の内容を変更したり、要求を処理する前にタスクを実行したりできます.
  • FilterとInterceptorはサーブレット単位で動作します.逆にAOPはメソッドの前でProxyモードで動作する.
  • インタフェースは、ログイン処理、権限チェック、プログラム実行時間計算、ログ確認などの業務処理に使用される複数のインタフェースを購入することができる.
  • AOPは、方法の前にProxyモードで動作する.主に「記録」、「目標」、「エラー処理」などの業務部門の方法でより細かく調整するために使用されます.AOPは,アドレス,パラメータ,ノイズなど多様な方法でターゲットを指定できる.
  • 依存注入


    対象の依存性をDI容器に渡す。


  • Setterメソッドorジェネレータを検索することにより依存性を注入する.
  • DIコンテナは、要求受信時に必要なオブジェクトのインスタンスを作成した後に依存性を設定します.
  • 例:Spring IoC Container

  • DIコンテナは、自動的にオブジェクトを接続します.

    Cross Cutting Corncerns(横興味分離)


    アプリケーション全体で共通の問題を分離

  • のビジネスロジックに加えて、ログ、トランザクション管理、セキュリティなど、注目すべき問題がたくさんあります.
  • の注目点は多くのアプリケーション層に分布しており、これらの注目点を分離して処理するとより効果的です.

  • 断面の注目点を分離する必要性

    public Response executeBusinessLogic(Request request) {
    	// 공통 기능
    	checkAuth(request)
    
    	// 비즈니스 로직
    	Response response = businessLogic(userName, message)
    
    	// 공통 기능
    	logging(response)
    }
    次のようにビジネスロジックに集中できます.
    public Response executeBusinessLogic(Request request) {
    	// 비즈니스 로직
    	Response response = businessLogic(userName, message)
    }
    
    // 공통 기능은 별도의 코드에서 관리한다

    リファレンス


    これらの情報はゼロベースラインクリーニングコード毎月1冊を聞いた後に整理された.