Java-5:オブジェクト向け設計5原則SOLID


1.SRP(単一責任原則):クラスを変更する理由は1つだけでなければなりません。


クラスには責任が一つしかない.
->クラスの責任によっては変更される場合があります.
->クラスに責任がある場合は、その責任の内容が変更されたため変更されます.
責任の単位は変化の部分と関係がある.
クラス内の変数/メソッドを使用するユーザ(クラス外部)が異なる意味(変数)を使用する場合、または異なるメソッドを使用する場合、原則に反する可能性があります.
ドメインクラス(モデル)が「情報戻り」(getter)、「情報保存」(save)、および「情報出力」(print)として機能する場合.
記憶情報は記憶媒体に依存する.
  • saveDB
  • saveMemory
    情報出力は、出力媒体によってコードが変化します.
  • printScreen
  • printConsole
  • SRPの原則は、変数、クラス、パッケージ、モジュール、およびデータベーステーブルに適用されます.
    2つの既知の方法
    1)クラスに変化がある部分はsubclass,変化がない部分(共通)はsuperclassである.
    2)一部のクラスをメンバーとして抽出

    2.開放閉鎖原則(OCP):自己の拡張開放、周辺の変更開放。


  • 身を閉ざす
    1つのクラスで使用される別のクラスに複数のインスタンスがある場合、各インスタンスは異なる方法を使用する必要があります.
  • 参照オブジェクトのクラスは抽象(親、インタフェース)を提供し、ユーザはオブジェクトの変化を実現する際に
  • を一定に保つことができる.

  • 自己拡張
  • 独自の抽象体があれば拡張(他の実装体)は問題ない
  • JDBCインタフェース
  • DBを使用するJavaアプリケーションは、データベースタイプを考慮せずにJDBCインタフェースが提供するメソッド
  • のみを呼び出す
  • Java
  • JavaプログラマーはJVM(オペレーティングシステム...)を使用できます.
  • 影響なし
    変化する部分(親/インタフェース)を抽象化しましょう

    3.LSP(リスク置換の原則):サブタイプは常に独自のベースタイプに置き換える必要があります。


    親タイプは、子タイプのインスタンスを親タイプの参照変数に挿入して機能するために豊富でなければなりません.

  • 親タイプが豊富でない場合は、常に変換する必要があります.

  • あるいは、if(サブAインスタンスof親)のような論理が必要であるため、コードは複雑になる
  • はまた、オープンクローズの原則に違反する(サブタイプが多く、変更がユーザーに影響を及ぼす場合、ユーザーは外部変更をクローズしない)
  • .

  • Java Collectionでは、親タイプのみで操作するのは問題ない
  • 4.ISP(インタフェース分離の原則):クライアントは自分が使用しない方法に依存してはいけない。

  • クライアントは、興味のある機能のみを公開します.
  • 使用すべきでない機能
  • 興味のない機能変更の影響を受けない
  • // ISP를 만족하지 않는다. 
    interface Printer { 
        copyDocument(); 
        printDocument(document: Document); 
        stapleDocument(document: Document, tray: Number); 
    } 
    
    // 사용되지 않는 메서드를 구현하고 있다.
    class SimplePrinter implements Printer { 
        public copyDocument() {} // 사용 하지 않음 
        public printDocument(document: Document) { 
        	console.log("simple copy", document); 
        } 
        public stapleDocument(document: Document, tray: Number) {} // 사용 하지 않음 
    }
    
    // ISP를 만족한다. 
    interface Printer { 
        printDocument(document: Document); 
    } 
    
    interface Stapler { 
        stapleDocument(document: Document, tray: number); } 
        
    interface Copier { 
        copyDocument(); 
    } 
    
    class SimplePrinter implements Printer { 
        public printDocument(document: Document) {} 
    } 
    
    class SuperPrinter implements Printer, Stapler, Copier { 
        public copyDocument() {} 
        public printDocument(document: Document) {} 
        public stapleDocument(document: Document, tray: number) {} 
    }

    5.逆転依存原則:自分より変わりやすいものに頼らない。


    自分よりも変わりやすいものに頼る.
    ->抽象的なインタフェースや上位レベルを一緒にして,変化しやすい(構想体)変化の影響を受けないようにすることが,依存逆転の原則である.
    ユーザー-販売(抽象)-サムスン/kakao/naver(実施)

    に感銘を与える


    これはすべてよく守るために生まれた原則のようです!