Java-5:オブジェクト向け設計5原則SOLID
1.SRP(単一責任原則):クラスを変更する理由は1つだけでなければなりません。
クラスには責任が一つしかない.
->クラスの責任によっては変更される場合があります.
->クラスに責任がある場合は、その責任の内容が変更されたため変更されます.
責任の単位は変化の部分と関係がある.
クラス内の変数/メソッドを使用するユーザ(クラス外部)が異なる意味(変数)を使用する場合、または異なるメソッドを使用する場合、原則に反する可能性があります.
ドメインクラス(モデル)が「情報戻り」(getter)、「情報保存」(save)、および「情報出力」(print)として機能する場合.
記憶情報は記憶媒体に依存する.
情報出力は、出力媒体によってコードが変化します.
2つの既知の方法
1)クラスに変化がある部分はsubclass,変化がない部分(共通)はsuperclassである.
2)一部のクラスをメンバーとして抽出
2.開放閉鎖原則(OCP):自己の拡張開放、周辺の変更開放。
身を閉ざす
1つのクラスで使用される別のクラスに複数のインスタンスがある場合、各インスタンスは異なる方法を使用する必要があります.
自己拡張
変化する部分(親/インタフェース)を抽象化しましょう
3.LSP(リスク置換の原則):サブタイプは常に独自のベースタイプに置き換える必要があります。
親タイプは、子タイプのインスタンスを親タイプの参照変数に挿入して機能するために豊富でなければなりません.
親タイプが豊富でない場合は、常に変換する必要があります.
あるいは、if(サブAインスタンスof親)のような論理が必要であるため、コードは複雑になる
例
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(実施)
に感銘を与える
これはすべてよく守るために生まれた原則のようです!
Reference
この問題について(Java-5:オブジェクト向け設計5原則SOLID), 我々は、より多くの情報をここで見つけました https://velog.io/@pro-park-gation/Java-5-객체-지향-설계-5원칙-SOLIDテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol