質問

新しいシステムを設計しており、システムの時間の経過とともに増加するインターフェイスが多数あります。このインターフェイスに名前を付けるベスト プラクティスは何ですか?

ISomethingV01
ISomethingV02
etc

そして私はこれをします

public interface ISomething{
      void method();
}

次に、方法 2 を追加する必要があるので、どうすればよいでしょうか?

public interface ISomethingV2:ISomething{
      void method2();
}

それとも別の方法でも同じですか?

役に立ちましたか?

解決

理想的には、インターフェイスを (たとえ変更するとしても) 頻繁に変更すべきではありません。インターフェイスを変更する必要がある場合は、その目的を再考し、元の名前が引き続きそのインターフェイスに適用されるかどうかを確認する必要があります。

それでもインターフェイスが変更されると思われ、インターフェイスの変更が小さく (項目の追加)、コード ベース全体を制御できる場合は、インターフェイスを変更してすべてのコンパイル エラーを修正するだけで済みます。

変更がインターフェースの使用方法の変更である場合は、別の使用パターンをサポートするために別のインターフェース (おそらく別の名前) を作成する必要があります。

最終的に ISomething、ISomething2、および ISomething3 を作成したとしても、インターフェイスの利用者はインターフェイス間の違いを理解するのに苦労するでしょう。いつ ISomething2 を使用し、いつ ISomething3 を使用する必要がありますか?次に、ISomething と ISomething2 を廃止するプロセスに進む必要があります。

他のヒント

インターフェースを使いすぎていると思います。

マイヤーとマーティンは次のように語った。「拡張はオープンですが、変更はクローズです!」

そしてCwalinaらは次のように繰り返した。

フレームワーク設計ガイドラインより...

一般に、クラスは抽象化を暴露するための好ましい構成要素です。インターフェイスの主な欠点は、APIの進化を可能にすることに関して、クラスよりも柔軟性が低いことです。インターフェイスを発送すると、メンバーのセットは永久に修正されます。インターフェイスに追加されると、インターフェイスを実装する既存のタイプが破損します。

クラスではさらに柔軟性が高まります。すでに出荷されているクラスにメンバーを追加できます。メソッドが抽象的でない限り(つまり、メソッドのデフォルトの実装を提供する限り)、既存の派生クラスは変更されずに機能し続けます。

alt text

同意する ガロ・イェリアザリアン, 、インターフェースの変更は重大な決断です。また、新しいバージョンのインターフェイスの使用を促進したい場合は、古いバージョンを廃止済みとしてマークする必要があります。.NETでは追加できます 廃止された属性.

インターフェイスの目的は、at type で実装する必要がある抽象パターンを定義することです。

次のように実装する方がよいでしょう。

public interface ISomething

public class Something1 : ISomething
public class Something2 : ISomething

同じインターフェイスの複数のバージョンを作成しても、コードの再利用性やスケーラブルな設計の形で何も得られません。

なぜ人々があなたの投稿に反対票を投じるのかわかりません。良い命名ガイドラインは次のとおりだと思います。 とても 重要。

以前との互換性を維持する必要がある場合は、同じインターフェイスのバージョンでは、継承の使用を検討してください。新しいバージョンのインターフェイスを導入する必要がある場合は、次のルールを考慮してください。

インターフェイスに意味のあるサフィックスを追加してみてください。簡潔な名前を作成できない場合は、バージョン番号の追加を検討してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top