2008-09-05 17 views
10

私は新しいシステムを設計しており、システムには時間が経つにつれて成長する多くのインターフェイスがあります。このインタフェースインターフェイスとバージョン番号

ISomethingV01 
ISomethingV02 
etc 

と私に名前を付けるのベストプラクティスは、この

public interface ISomething{ 
     void method(); 
} 

はその後、私は今、私は何をすべきか方法2を追加するために何をしなければならないのですか?

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

または他の同じ方法ですか?

答えて

5

理想的には、インターフェイスを頻繁に変更する必要はありません。インターフェイスを変更する必要がある場合は、目的を再検討し、元の名前がまだ適用されているかどうかを確認する必要があります。

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

インターフェイスの使用方法が変更された場合は、その別の使用パターンをサポートするために、別のインターフェイス(別名を使用する可能性が高い)を作成する必要があります。

ISomething2とISomething3を作成しても、インターフェイスのコンシューマは、インターフェイス間の違いを把握するのに苦労します。彼らはいつISomething2を使用すべきですか?いつISomething3を使用すべきですか?それから、あなたはISomethingとISomething2を廃止するプロセスに進む必要があります。

2

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

それはとして実装するほうがよいでしょう:あなたが同じインターフェイスの複数のバージョンを作成することによって、コードの再利用性や拡張性の高いデザインの形で何かを得ていない

public interface ISomething 

public class Something1 : ISomething 
public class Something2 : ISomething 

2

私は人々があなたの投稿をdownvoteする理由はわかりません。私は良い命名のガイドラインは非常にが重要だと思います。

以前のバージョンとの互換性を維持する必要がある場合は、同じインターフェースのバージョンは継承の使用を検討します。 あなたは、インターフェイスの新しいバージョンを導入する必要がある場合は、ルール以下の点を考慮:

あなたに インターフェースを意味の接尾辞を追加してください。 簡略名を作成できない場合は、 のバージョン番号を追加することを検討してください。

4

私はGaro Yeriazarianに同意します。インターフェイスを変更することは重大な決定です。また、新しいバージョンのインタフェースの使用を促進したい場合は、古いバージョンを古いものとしてマークする必要があります。 .NETではObsoleteAttributeを追加できます。

6

私はあなたがインターフェイスをオーバーラップしていると思います。

マイヤーとマーティンは私たちにこう言いました。「

、次いでCwalina(ら)繰り返し:一般的なフレームワークの設計ガイドラインから

...

を、クラスが抽象化を露出させるための好ましい 構築され インターフェースの主な欠点。 APIを進化させるためには、 クラスよりもはるかに融通性が低いと言われています。 インターフェイスを出荷すると、メンバーのセットは永久に固定されます インターフェイスに追加すると、インターフェイスを実装している既存のタイプが破損する可能性があります( )。

クラスには、はるかに柔軟性があります。 がすでに出荷されているクラスにメンバーを追加できます。 メソッドが抽象メソッドでない限り、つまり、 メソッドのデフォルトの を実装すると、 既存の派生クラスはすべて のまま変わりません。

alt text

関連する問題