インターフェイスの実装に関するドキュメントの複製/オーバーライドの良し悪し


20

だから私たちはそのようなインターフェイスを持っています

/// <summary>
/// Interface for classes capable of creating foos
/// </summary>
public interface ICreatesFoo
{
  /// <summary>
  /// Creates foos
  /// </summary>
  void Create(Foo foo);
  /// <summary>
  /// Does Bar stuff
  /// </summary>
  void Bar();
}

最近、私たちは、上記のようなXML文書がたくさんあることを生成し、確認することを含む文書の話をしました。しかし、これはドキュメントの多くの重複を引き起こしました。実装例:

/// <summary>
/// A Foo Creator which is fast
/// </summary>
public class FastFooCreator : ICreatesFoo
{
  /// <summary>
  /// Creates foos
  /// </summary>
  public void Create(Foo foo)
  {
    //insert code here
  }
  /// <summary>
  /// Does Bar stuff
  /// </summary>
  public void Bar()
  {
    //code here
  }
}

あなたが見ることができるように、メソッドのドキュメントは、インターフェイスからまっすぐです。

大きな問題は、これは悪いことですか?私の腸は重複のために私にイエスと言っていますが、それから再びそうでないかもしれませんか?

また、override関数とvirtual関数を使用した他の同様のドキュメントの複製があります。

これは悪いですか、回避すべきですか?それはまったく価値がありますか?


Resharperを使用する場合、実装内でのみコメントを変更し、「メンバーをプル」を使用してインターフェイスを更新できます。
vortexwolf

私はこれを行いますが、おそらく外部ツールを使用するのが苦手なので、インターフェイスのヘッダーファイルに移動して、特定の種類のことで何ができるかを確認したいのです(これはCとC ++ソースファイルのヘッダーの概念)。それは少し繰り返しますが、メソッドをオーバーライドする具体的なクラスに関連するより具体的な詳細を追加する機会を見つけようとします。たとえば、私はそれが好きで、そうしないと重要なものを省略したように感じるOCDのものがありますヘッダーファイル内のすべての関数のコメントを参照してください。

私は実際にDoxygenのコメントとタグを使用していますが、実際にはコーディングの過程でドキュメントをあまり見ていません。ヘッダーファイルに移動して、何かできることを確認することを好みます。老犬が新しい習慣や道具を手に入れるのに苦労しているのかもしれません。

回答:


9

一般的に、言及する必要のある実装に特定の何かがある場合にのみ、実装のメソッドに新しいドキュメントを追加します。

javadocでは、他のメソッドにリンクできます。これにより、インターフェース内のメソッドドキュメントへの実装にリンクを作成するだけで済みます。私はこれが.Netで行われるべき方法だと思います(私自身の経験ではなく、オンラインドキュメントを読んだことに基づいています):

/// <summary>
/// Interface for classes capable of creating foos
/// </summary>
public interface ICreatesFoo
{
  /// <summary>
  /// Creates foos
  /// </summary>
  void Create(Foo foo);
  /// <summary>
  /// Does Bar stuff
  /// </summary>
  void Bar();
}

/// <summary>
/// A Foo Creator which is fast
/// </summary>
public class FastFooCreator : ICreatesFoo
{
  /// <summary>
  /// <see cref="ICreatesFoo.Create(Foo)"/>
  /// </summary>
  public void Create(Foo foo)
  {
    //insert code here
  }
  /// <summary>
  /// <see cref="ICreatesFoo.Bar()"/>
  /// Also Note: Implementation of Bar() in FastFooCreator
  /// requires a minimum of 512 MB RAM to Bar the Foo. 
  /// </summary>
  public void Bar()
  {
    //code here
  }
}

<see/>要素のドキュメント:http : //msdn.microsoft.com/en-us/library/acd0tfbe.aspx


継承されたクラスのXMLドキュメントをオーバーライドしてはどうですか?のサブクラスを作成し、Collection<T>そのCountプロパティXMLドキュメントをオーバーライドするとします。
シミー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.