「拡張に近い、変更に近い」原則に従う必要があるのはなぜですか?なぜ組成はオープンクローズド原理に従うべきですか?
私が理解していること:クラスに機能を追加する場合は、新しいコードを作成して合成を使用してそのコードを取得するだけです。
しかし、あなたは構成を持っているコードを変更するだけですか?そのコードにコンポジションを追加して、そのコードを変更するからです。
例:
それがこれです、前に:
public class Example{
public void Walk(){
//walking
}
}
以降:
public class Example{
RunClass r = new RunClass(); // I add this
public void Walk(){
//walking
}
public void Run(){ // I also add this
r.run();
}
}
だからこれは私がこのクラスを変更を意味します。
「e」または「r」をコードを変更する必要がある別のインスタンスに変更する必要がある場合は、最初の例はOCP、bcの後にはないと思います。この場合、IoCを使用してクラス内にインスタンスを作成するのではなく、インスタンスを渡すための戦略パターンを使用できます – CCC