最近、きれいなコード開発に関するWebサイトを読んでいます(英語ではないため、ここにはリンクを入れません)。
このサイトで宣伝されている原則の1つは、オープンクローズド原則です。各ソフトウェアコンポーネントは、拡張用にオープンにし、変更用にクローズする必要があります。たとえば、クラスを実装してテストした場合、バグを修正するか、新しい機能を追加する(たとえば、既存のメソッドに影響を与えない新しいメソッド)ためにクラスを変更するだけです。既存の機能と実装は変更しないでください。
通常、インターフェイスI
と対応する実装クラスを定義することにより、この原則を適用しますA
。クラスA
が安定(実装およびテスト)になったとき、通常はあまり変更しません(おそらく、まったく変更しません)。
- コードに大きな変更を必要とする新しい要件(パフォーマンス、インターフェイスのまったく新しい実装など)が到着した場合、新しい実装を作成し、成熟していない限り
B
使用A
し続けB
ます。B
成熟したときに必要なのは、I
インスタンス化の方法を変更することだけです。 - 新しい要件がインターフェースの変更も示唆している場合、新しいインターフェース
I'
と新しい実装を定義しますA'
。ですからI
、A
凍結しており、残る実装限りとして生産システムのためI'
およびA'
それらを交換するのに十分安定していません。
そのため、これらの観察を考慮して、Webページが複雑なリファクタリングの使用を提案していることに少し驚いていました。
オープン/クローズド原則の実施と、ベストプラクティスとしての複雑なリファクタリングの使用の提案との間に矛盾や矛盾はありませんか?または、ここでのアイデアは、クラスの開発中に複雑なリファクタリングを使用できるということですA
が、そのクラスが正常にテストされたら、凍結する必要がありますか?