StyleCop 규칙 SA1600은 모든 유형 멤버에게 자체 문서 헤더가 있어야합니다. 나는 그것이 꽤 합리적이라고 생각하고 나는이 규칙을 좋아한다. 그러나 우리는 다음과 같은 계층 구조가 있다고 가정 : 여기StyleCop SA1600 규칙 및 인터페이스 구현
/// <summary>
/// Documentation for interface ISomeModule.
/// </summary>
interface ISomeModule
{
/// <summary>
/// Documentation for DoA.
/// </summary>
void DoA();
/// <summary>
/// Documentation for DoB.
/// </summary>
void DoB();
}
/// <summary>
/// Documentation for StandardModule.
/// </summary>
class StandardModule : ISomeModule
{
private readonly SomeCoolType _value;
/// <summary>
/// Documentation for constructor.
/// </summary>
public StandardModule(SomeCoolType value)
{
_value = value;
}
// SA1600 violation here!
public void DoA()
{
// realisation of DoA().
}
// SA1600 violation here!
public void DoB()
{
// realisation of DoB().
}
/// <summary>
/// Documentation for MyOwnDoC.
/// </summary>
public void MyOwnDoC()
{
// realisation of MyOwnDoC().
}
}
을, 나는 완전히 문서화 인터페이스 멤버는 DOA()와 DOB(), 우리는이 방법을 정확히 인터페이스 문서에서 무엇을 알고있다. VS Intellisence도이를 알고 있으며 StandardModule 클래스에서도이 메서드 위로 마우스를 가져 가면 메서드에 대한 설명을 볼 수 있습니다. 따라서 인터페이스에서 파생 된 클래스로 문서를 복사 할 필요가 없습니다. 그러나 StyleCop은 그것을 요구합니다. 왜? 아무도 몰라? 인터페이스에서
1. 복사 문서 : 우리는이 문제를 해결하려고하면
, 우리는 4 개 가지 방법으로 갈 수 있습니다. 여기서 문제는 문서를 복사 할 때 인터페이스 동작이 변경되면 모든 파생 클래스에서 설명서를 업데이트하는 문제를 해결할 것입니다.
2. SuppressMessageAttribute과 함께 메시지를 표시하지 않습니다. 음, "Ok, SuppressMessageAttribute를 사용할 수 있습니다"라고 말하면 내가 동의하지 않는이 위반을 억제한다고 가정 해 봅시다. 그리고 규칙 SA1600에 대해 SuppressMessageAttribute 클래스 StandardModule 앞에 덧붙입니다. 그러나 이제 StyleCop은 StandardModule 클래스의 문서 헤더를 전혀 검사하지 않습니다. 우리가 생성자와 다른 방법을 가지고 있기 때문에 나는 그것을 원하지 않는다. 지역에
3. 나누기 클래스는 우리는이 개 지역에 클래스 StandardModule을 나누어에만 인터페이스 ISomeModule를 구현하는 부분에 메시지 억제를 사용할 수 있습니다. 그리고 모든 부분을 하나의 파일에 배치해야한다고 생각합니다. 나는이 접근 방식을 가장 좋아합니다. (# 4 이후), 이제는 한 클래스의 여러 부분을 다뤄야합니다.
4. 규칙 SA1600을 수정하십시오. 규칙 SA1600을 자체적으로 구현하여 클래스 멤버가 기본 클래스 또는 인터페이스에 문서화되었는지 여부를 고려할 수 있습니까? (여기에서는 StyleCop에 대한 자체 규칙을 작성할 수 있는지 묻지 않습니다. 가능하다고 알고 있지만 StyleCop 엔진이 일부 멤버가 인터페이스 또는 기본 클래스에서 왔는지 확인할 수 있는지 여부를 나타냅니다.)
인터페이스 구현시 SA1600 문제를 해결하는 가장 좋은 방법은 무엇입니까?
+1 잘 쓰여진 고품질의 질문입니다. –