インターフェース、実装、またはその両方にコメントしますか?


128

私たち全員が(私たちが気になることがあるとき!)私たちのインターフェースにコメントしていると思います。例えば

/// <summary>
/// Foo Interface
/// </summary>
public interface Foo
{
    /// <summary>
    /// Will 'bar'
    /// </summary>
    /// <param name="wibble">Wibble factor</param>
    void Bar(string wibble);
}

実装についてもコメントしますか(ライブラリーの一部としてクライアントに提供される場合もあります)?もしそうなら、どのようにしてこの2つの同期を保つのですか または、「ドキュメントのインターフェイスを表示」コメントを追加するだけですか?

ありがとう


ここを通じて重複潜入:stackoverflow.com/questions/1875440/...
bytedev

回答:


98

原則として、コードと同じDRY(Do n't Repeat Yourself)の原則を使用します。

  • インターフェイスで、インターフェイスを文書化します
  • 実装時に、実装の詳細を文書化します

Java固有:実装を文書化するときは、{@ inheritDoc}タグを使用して、インターフェースからjavadocsを「含める」。

詳細については:


@inheritDocタグについて知らなかった情報をありがとう
Paul Whelan

うわぁ... {@inheritDoc}も存在するとは思いもしませんでした!今日から定期的に使います。
mcherm

35
C#の場合は<inheritdoc />、SandCastleでサポートされているを使用できます。(詳細情報
Daniel AA Pelsmaeker

2
継承されたクラス内のプロパティおよびその他の要素は、インターフェイスでのみ指定されている場合、ツールチップにXMLドキュメントを表示しません。同じクラスを外部で使用する場合は表示されます。これは、Visual Studio 2015のバグである可能性があります
。– SondreB

2
Sandcastle / SHFB inheritdocページに提供されているリンク@Virtlinkの更新バージョンは次のとおり
weir


5

C#の場合はIMOに依存します。明示的なインターフェイス実装を使用する場合、実装についてはドキュメント化しません。

ただし、インターフェイスを直接実装し、オブジェクトのインターフェイスのメンバーを公開する場合は、これらのメソッドもドキュメント化する必要があります。

Nathが言ったように、GhostDocを使用して、インターフェイスのドキュメントを実装に自動的に挿入できます。DocumentこのコマンドをCtrl + Shift + Dショートカットと、ほぼ自動的に押すキーストロークの1つにマッピングしました。ReSharperには、メソッドを実装するときに、インターフェイスのドキュメントを挿入するオプションもあると思います。


4

インターフェースのみ。両方にコメントを付けることは重複であり、コードが変更されると、2つのコメントのセットが最終的に同期しなくなる可能性があります。"implements MyInterface"で実装にコメントを付けます... Doxygenのようなものは、とにかく実装用のドキュメントに派生ドキュメントを含むドキュメントを生成します(正しく設定した場合)。


4

インターフェースにコメントを付けるだけです。コメントは、派生クラスまたは基本クラス/インターフェースと同期しなくなるので、1か所に置くと便利です。

@Nathは、物事をまとめるのに役立つ自動化されたドキュメントツールを提案しているように見えますが(それを使用すれば素晴らしい音がします)。ここWhereIWorkAndYouDontCareのコメントは開発者向けなので、コード内の1つの場所が推奨されます


残念ながら自動化されておらず、ユーザーの操作が必要です。
NikolaiDante 2009

3

インターフェースのコメントは、実際の実装を使用する方法を理解するのに十分なドキュメントでなければなりません。実装にコメントを追加するのは、インターフェースを満たすために挿入されたプライベート関数がある場合のみですが、それらは内部のみのコメントであり、オンラインのドキュメントには表示されず、クライアントからも利用できません。

実装はそれだけですが、インターフェースに準拠している限り、それらを個別に文書化する必要はありません。


1

XMLドキュメントファイルを後処理して<inheritdoc />タグのサポートを追加するツールを作成しました。

ソースコードのIntellisenseには役立ちませんが、変更されたXMLドキュメントファイルをNuGetパッケージに含めることができるため、参照されているNuGetパッケージのIntellisenseで動作します。

これはwww.inheritdoc.io(無料バージョンあり)にあります。


<inheritdoc />はSandcastle Help File Builderでもサポートされており、ここに記載されています:ewsoftware.github.io/XMLCommentsGuide/html/…。これも前述のとおりであることを発見しました。
Olly

1

あなたは確かに両方にコメントすることができますが、それからあなたは(前述のように)両方を維持する問題を抱えています。ただし、この時代には、IoC / DIを使用せず、インターフェースを使用しない消費コードはありますか?これを考えると、1つだけコメントしたい場合は、インターフェイスにコメントすることを強くお勧めします。このようにして、コードのコンシューマーは、おそらく素晴らしいインテリセンスのヒントを得るでしょう。


1

C#の使用法:

インターフェイスは次のようになります。

    /// <summary>
    /// Helper class to access various properties for the current site.
    /// </summary>
    public interface ISiteHelper
    {
        /// <summary>
        /// Gets the site id of the current site
        /// </summary>
        /// <returns>The site id.</returns>
        int GetSiteID();
    }
}

実装は次のようになります。

/// <inheritdoc />
public class SiteHelper: ISiteHelper
{
    /// <inheritdoc />
    public int GetSiteID()
    {
        return CommonRepository.GetSiteID();
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.