여러 클래스를 포함하는 C # 파일의 명명 규칙은 무엇입니까?


20

C # 프로젝트에서는 작고 밀접하게 관련된 클래스를 동일한 .cs파일 로 그룹화하는 경우가 많습니다 . 이 방법은 실제 코드에 거의 근접하지 않은 수많은 파일을 다루는 마찰을 줄입니다. 그러나 여러 클래스를 포함 하는 파일의 이름을 지정하는 관행이 있습니까?


13
솔직히 나는 아주 작은 수업이라도 하나의 수업을 선호합니다
Felice Pollano

밀접하게 관련된 클래스가 속하는 그룹 별로 이름을 지정할 수 있습니다 .
V4Vendetta

아마도 그 수업이 너무 작을까요? 개인적으로 하나의 파일에 여러 열거 형을 그룹화합니다 (때로는 클래스에 따라, 때로는 상황에 따라 모든 열거 형을 함께 묶는 경우도 있음).
Konrad Morawski

@Felice : MSpec 살펴보기 :)
Bryan Boettcher

답변:


18

내 충고 : 너무 많은 파일이 있음을 의미하더라도 여러 클래스와 이름 파일 == 클래스를 포함하는 파일을 피하십시오. 폴더로 정리해보십시오. 매우 특별한 경우 중첩 클래스가있을 수 있습니다. 이 경우 기본 클래스와 중첩 클래스를 하나의 부분 클래스가있는 다른 파일로 분리하는 것이 좋습니다. 이 경우 다음과 같은 명명 규칙을 사용합니다.

MyEnumerable.cs
MyEnumerable.MyEnumerator.cs

아마도 귀하의 경우에 여러 부분으로 된 파일 이름을 사용할 수도 있습니다.


4
하나 더 아이디어. Visual Studio Project에서 여러 .cs 파일을 그룹화하여 트리의 동일한 노드 (예 : .Designer.cs 파일) 아래에 모두 표시되도록 할 수 있습니다. 이것은 클래스가 밀접하게 속해 있음을 나타냅니다.


4

이러한 파일의 이름을 지정하는 방법에 대한 질문을 통해 문제가되는 코드 냄새를 이미 식별했으며 이는 쉽게 사라지지 않는 문제입니다.

추론에 관계없이 파일에 클래스가 둘 이상있을 때 적절한 이름을 선택하는 것이 어렵다는 것을 알 수 있습니다. 파일이 어떤 식 으로든 관련되어 있어도 무언가를 던질 유혹이 항상 있기 때문입니다. 클래스 집합에 할당 한 그룹 이름에 맞지 않습니다.

따라서 짧은 대답은 이러한 종류의 파일 이름을 지정하기 위해 인정되거나 확립 된 표준이 없다는 것입니다. 내 제안은 팀과 함께 코드 구성을 살펴보고 약간의 리팩토링 노력을 적용하여 정리하는 것입니다.

그러나 일을 조금 더 쉽게하기 위해 추가 클래스가 중첩되어 있는지 또는 독립적인지 묻습니다. 독립적 인 경우 이러한 클래스는 단일 클래스에 대해 명명 된 각 파일을 포함하여 자체 파일로보다 쉽게 ​​분리 할 수 ​​있습니다. 중첩 된 경우 이러한 클래스를 구성하는 방법에 대한 추가 결정이 필요할 수 있지만 중첩 된 클래스를 즉시 제거하지 않아도되므로 파일의 이름이 가장 바깥 쪽 클래스로 지정됩니다. 중첩에 관한 한, 어떤 상황에서는 중첩에 대한 논쟁이 많고 합리적인 몇 가지가 있으며, 합리적인 이름 공간을 만들고 더 체계적인 소스 코드 구조를 만드는 것이 더 나은 방법인지 물어 보는 것이 좋습니다. 문제.

그러나 실제로는 프로젝트 수명이 끝날 때까지 파일에 모두 단일 클래스와 멋진 디렉토리 / 네임 스페이스 구조가 포함되어 있기를 바랍니다.

건배,


3

나는 한 파일에 여러 클래스를 가지고 있었지만, 실제로 내 자신이 아닌 프로그래머로 일하기 시작한 이래로 단일 파일에 많은 클래스가있는 유지 보수의 악몽이 될 수 있음을 발견했습니다. 물론 Visual Studio는 F12 (정의로 이동)를 사용하여 많은 도움을 줄 수 있습니다.

내가 시작한 것은 다음과 같은 이름 지정 규칙을 사용하는 것입니다. namespace.classname.cs 그렇게하면 각 파일에 무엇이 있는지 정확히 알고 있으며 파일의 전반적인 컨텍스트를 제공합니다. 클래스가 기본 네임 스페이스에있을 경우 계속 진행하고 classname.cs (Java와 유사)를 사용하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.