Comment the interface, implementation or both?
I imagine that we all (when we can be bothered!) comment our interfaces. e.g.
/// <summary>
/// Foo Interface
/// </summary>
public interface Foo
{
/// <summary>
/// Will 'bar'
/// </summary>
/// <param name="wibble">Wibble factor</param>
void Bar(string wibble);
}
Do you also comment the implementation (which may also be provided to clients, e.g. as part of a a library)? If so how do you manage keeping the two in sync? Or do you just add a 'See interface for documentation' comment?
Thanks
Solution 1:
As a general rule, I use the same DRY (Don't Repeat Yourself) principle as with code:
- on interface, document the interface
- on implementation, document the implementation specifics
Java specific: when documenting the implementation, use {@inheritDoc} tag to "include" javadocs from the interface.
For more information:
- Official javadoc documentation
- Some unofficial advice.
Solution 2:
C# usage:
Interface can look like this:
/// <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();
}
}
Implementation can look like this:
/// <inheritdoc />
public class SiteHelper: ISiteHelper
{
/// <inheritdoc />
public int GetSiteID()
{
return CommonRepository.GetSiteID();
}
}