SOLID に関する記事を読みましたが、OCP と DIP の違いはわかりません。この OCP の例を見てください。
http://www.oodesign.com/open-close-principle.html
OCP を保持するコードは、DIP も満たします。DIPではなくOCPを保持するコードの例を誰か教えてもらえますか?
SOLID に関する記事を読みましたが、OCP と DIP の違いはわかりません。この OCP の例を見てください。
http://www.oodesign.com/open-close-principle.html
OCP を保持するコードは、DIP も満たします。DIPではなくOCPを保持するコードの例を誰か教えてもらえますか?
依存性注入と開閉の説明もわかりにくいと思います。そのようにする必要はありません。あなたが参照している記事を見てみましょう:http ://www.oodesign.com/open-close-principle.html
彼らの例では、GraphicsEditorクラスと形状クラスの階層があります。それらが示す最初のクラス図では、GraphicsEditorに、さまざまな種類の形状クラスを描画するための一連のメソッドがあります。drawCircle; drawRectangle。
平行四辺形クラスを追加するとどうなりますか?最初に新しいクラスParallelogramを作成し、次にGraphicsEditorクラスを変更してdrawParallelogramという新しいメソッドを追加します。
これは、この記事で言及されている「悪さ」です。新しい形状を1つ追加すると、既存のコードを変更する必要があります。Shapeの新しいサブクラス(平行四辺形)を追加し、GraphicsEditor(drawParallelogram)に新しいメソッドを追加します。
それは大したことではないように思えるかもしれませんが、拡張性はありません。20人の開発者のチームがすべて一度にソフトウェアに取り組んでいると想像してください。まず、新しい形状を追加するすべての開発者は、2つのことを行うことを忘れないでください。既存のコードを更新することと、新しいコードを作成することです。プロジェクトに参加するすべての新しい開発者は、おそらくこれを難しい方法で学ぶでしょう。第二に、誰もが毎日新しい図形を追加している場合、それは誰もがGraphicsEditorクラスを編集しようとしていることを意味します。同時に。それは頭痛の種です。どうやってそれを知っているのか聞いてください。:-)(変更されると、既存のコードにバグが発生する可能性もあります。)
GraphicsEditorクラスのコードに触れることなく、システムに新しいShapeを追加できれば理想的です。それがこの記事で示したいことです。
記事の2番目のクラス図を見てください。各シェイプは、独自の描画メソッドを実装するようになりました。GraphicsEditorは、いくつかのスーパークラス「Shape」があり、そのすべてのサブクラスがメソッド「draw」を実装していることを知る必要があるだけです。GraphicsEditorは、サブクラスがいくつあるか、またはそれらの名前が何であるかを気にしなくなりました。開発者は、GraphicsEditorクラスを変更することなく、新しいシェイプを自由に実装できます。GraphicsEditorクラスは「クローズ」されました。このように、システムは「拡張に対してオープン」です。新しい形状を作成するために既存のコードを変更する必要はありません。問題が解決しました。
これらすべてを理解するためのより簡単な方法は、VisitorDesignPatternを学ぶことです。ウィキペディアによるこのパターンの説明が気に入らないので、別の場所を紹介します:http ://sourcemaking.com/design_patterns/visitor 。ビジターパターンを理解することで、他のすべての用語や概念が適切に機能すると思います。