.NET에서 파일 규칙 당 하나의 클래스? [닫은]


185

나는이 규칙을 따르지만 일부 동료들은 이에 동의하지 않고 수업이 더 작 으면 다른 수업과 같은 파일에 남을 수 있다고 주장합니다.

내가 항상 듣는 또 다른 주장은 "마이크로 소프트도 그렇게하지 않는 이유는 무엇입니까?"

이것에 대한 일반적인 합의는 무엇입니까? 이것을 피해야하는 경우가 있습니까?



답변:


176

파일 당 하나의 클래스는 또한 파일의 차이점을 보지 않고 각 체크인이 무엇을 변경하는지에 대한 더 나은 아이디어를 제공합니다.


4
동일한 파일에 더 많은 클래스가 있으면 한 번의 조작으로 관련 클래스 간의 차이가 향상됩니다.
Luca

3
적절한 diff 뷰어를 사용하면 한 커밋의 모든 diff를 볼 수 있습니다.
Dykam

44
이 특정 답변이 원래 게시물의 질문에 대한 답변인지 확실하지 않습니다. 물론 그것은 하나의 수업을 파일에 보관해야하는 이유를 제공하지만 (Luca와 Dykam은 좋은 점을 제시하지만) 일반적인 합의를 반영하거나 피해야 할 경우를 제공하지는 않습니다.
Robert Davis

4
모범 사례가 존재한다고 생각되면 모범 사례는 존재하지 않으며 주어진 컨텍스트에만 적용됩니다. 다른 답변에서 알 수 있듯이이 규칙이 실제로 유지 관리하기 어려운 코드를 생성 할 때가 있습니다. 도구가 나아질수록이 규칙은 프로젝트 내에서 클래스와 유형을 훨씬 쉽게 찾을 수 있기 때문에 관련성이 떨어집니다.
abombss

263

나는 사람들이 절대적으로 생각하고 당신이 이것과 같은 주관적이고 엄청나게 까다로운 것을 사용해서는 안된다고 말할 때 그것을 싫어합니다. 결론 : 파일 당 하나 이상의 클래스를 갖는 것이 의미가 있다면 완전히 좋습니다. 이해하기 쉬운 의미는 다음과 같습니다.

  1. 코드를보다 쉽게 ​​요약하고 관리 할 수 ​​있습니다
  2. 솔루션을 덜 성가 시게 만들고 (수 많은 불필요한 파일을 스크롤 함) 느리게 만듭니다
  3. 개발자 팀은 로컬 코딩 연습으로 괜찮습니다.

파일 당 여러 클래스를 원하는 이유에 대한 좋은 예 :

수십 개의 사용자 정의 예외 클래스가 있는데 각 클래스는 4 라이너이며, 각각에 대해 별도의 파일을 가질 수 있거나 예외를 그룹화하고 그룹 당 파일을 가질 수 있습니다. 나에게 가장 합리적인 / 실용적인 접근 방식은 그룹화하는 것입니다. 시간 / 코딩이 더 효율적이기 때문에 파일이 몇 개뿐입니다 (마우스 오른쪽 버튼을 클릭 할 필요가 없습니다-> 클래스 추가, 이름 바꾸기, 50 번) 따라서 솔루션의 혼란을 줄이고 성능을 향상시킵니다.


92
+1,000 모범 사례에 대한 이론적 근거를 이해하고이를 위반하기 전에 두 번 생각하는 것이 좋습니다. 노골적인 준수는 악하다.
dsimcha

19
수십 개의 사용자 정의 예외 클래스 ? 이것이 문제의 실제 원인이 아닙니까? 나는 여기서 사람들이 엄청 까다로운 것을 의미하지는 않습니다. 사람들이 클래스를 하나의 파일로 결합하려고하는 대부분의 시간은 불필요하게 너무 많은 유형을 생성하기 때문입니다. (수십 개의 사용자 정의 예외 클래스가 의미가있는 실제 사례가있을 수 있습니다). 수많은 소규모의 비 운영 클래스는 일반적으로 더 큰 문제의 신호입니다.
Jeff Sternal

16
나는 대부분 당신에게 동의합니다. 그러나 예외는 특별한 경우입니다. 올바르게 설계된 시스템에는 합법적 인 오류가 발생하는 모든 경우를 처리하기 위해 적절한 예외 처리가 필요하기 때문에 필자가 읽은 대부분의 모범 사례 기사에서는 특정 예외를 작성해야 할 필요성을 강조합니다. 적절한 예외 처리가 아닌 system.exception을 포착하지 않도록 큰 프로젝트에서 모든 비즈니스 규칙을 다루십시오.
James

6
정당한 이유없이 일부 지침을 노예로 따르지 말아야한다는 데 동의하지만 파일에 둘 이상의 수업이 있어야한다는 사실에 동의하지 않습니다. 나에게 파일 이름은 클래스 이름을 따라야하며 둘 이상을 포함해서는 안됩니다. 일부 언어 (Java는 하나임)는 클래스 이름과 일치하는 파일 이름을 가진 파일에 클래스를 실제로 적용하는 것을 기록합니다. 나를 위해 초보자가 더 쉽게 탐색 할 수 있도록하기 때문에 파일 당 하나의 클래스가 옳은 일이라고 생각합니다.
krystan honor

3
파일 당 하나의 클래스를 유지하고 파일 이름과 클래스 이름을 동기화 상태로 유지하는 것은 명명 변수와 마찬가지로 규칙입니다. Visual Studio는이 접근 방식에 매우 적합합니다. 소스 제어 시스템 및 프로젝트 중간에 추가 된 개발자가 더 쉽습니다. 클래스 이름과 일치하는 파일 이름을 직관적으로 검색합니다.
Oybek

75
static bool GeneralRuleShouldBeFollowed(IGeneralRule rule, IUseCase useCase)
{
    return (rule.Overhead(useCase) 
            < My.PersonalThresholds.ConformismVsPracticality);
}

4
.NET에서 이와 같은 규칙이 있습니까? 또한 진술 결과를 반환했을 것입니다. : O
Joan Venge

50

나는 그들이 밀접하게 결합되어 있고 그 중 적어도 하나가 매우 작은 경우 파일에서 둘 이상의 클래스를 그룹화합니다.

일반적인 '모범 사례'는 수업 당 하나의 파일을 갖는 것입니다.


7
그것들이 결합되어 있음을 알고 있다면 왜 그것들을 분리하지 않습니까?
Matt

39
@The Matt : 오버 엔지니어링을 피한다고합니다. 밀접하게 결합 된 클래스가 몇 개이고 분리하면 실제 유연성의 양에 비해 많은 복잡성이 추가됩니다. 그렇다면 요점은 무엇입니까?
dsimcha

9
때로는 기본적으로이 하나의 클래스에서만 사용되는 "데이터"클래스를 좋아하기 때문에 일반적으로 datac-lass에는 로직 자체가 거의 또는 전혀 없기 때문에 데이터 클래스를 사용자와 동일한 파일에 넣습니다. 새 파일을 만들려면 낭비하십시오.
Earlz

3
@The Matt : 때로는 커플 링 허용 가능하다고 주장하는 도우미 클래스가 있습니다. 그들은 다른 클래스의 일부에 대한 복잡성을 줄이지 만 여전히 해당 클래스에 대한 매우 구체적인 목적을 용이하게합니다.
Jordan Parmer

6
@TheMatt : 분리 : msdn.microsoft.com/en-us/library/… 모듈 간 연결은 좋지 않지만 논리적 기능 내에서 클래스 간 공동 작업은 피할 수 없습니다.
Ben Voigt

25

가상의 주장을 넘어서 Visual Studio IDE를 사용하는 Windows .NET에 집중하고 소프트웨어 프로젝트를 늘리는 것 외에도 파일 당 하나의 클래스를 갖는 것이이 맥락에서 의미가 있습니다.


일반적으로 시각적 참조의 경우 파일 당 하나의 클래스를 능가하지 않습니다. 정말.

나는 Microsoft가 똑같이하지 않는지 알지 못하지만 하나의 클래스를 여러 파일 로 나누기 위해 partial키워드 를 만들었습니다 (더 심각합니다). 자동 생성 된 디자이너 코드를 동일한 클래스 의 사용자 정의 코드에서 분리하는 데 종종 사용됩니다 (그러나 때로는 다른 개발자가 다른 파일을 통해 동시에 클래스에서 작업 할 수 있도록하는 데 사용됨). 따라서 Microsoft는 여러 파일의 이점을보고 있으며 .NET을 사용하면 누구나 여러 파일 구성을 염두에두고 있습니다.

중첩 클래스의 경우 하나의 파일 또는 적어도 클래스의 첫 번째 부분을 사용하는 것 외에는 선택의 여지가 없습니다. 이 경우 하나의 파일이 필요하고 훌륭합니다.

class BicycleWheel {
    class WheelSpoke {
    }
}

그렇지 않으면 왜 하나의 파일에 여러 클래스를 유지합니까? "작기 때문에" 또는 서로 연관되어 있다는 주장 결국 많은 수업이 다른 수업과 관련되기 때문에 많은 물을 보유하지 않습니다 . 궁극적으로 특히 소프트웨어가 계속 성장함 에 따라 객체 사용을 기반으로 파일 내 오브젝트 구성을 쉽게 유추 할 수 없습니다 .

또한 네임 스페이스에 폴더를 사용 하면 클래스 파일 이름 충돌이 발생하지 않습니다. 또한 Visual Studio와 같은 개발 환경에 있지 않을 때 파일 시스템에서 파일 이름으로 클래스찾는 것이 편리합니다 (예 : 메모장 또는 빠른 / 가벼운 것을 사용하여 클래스를 빠르게 편집하려는 경우 ).

많은 이유가 있습니다 ...


고마워 "최소한 첫 부분"이란 무엇입니까? 중첩 클래스를 분리 할 수도 있다는 의미입니까?
Joan Venge

1
그것은 partial내가 언급 한 키워드에 대한 간접적 인 참조 입니다.
John K

1
레코드 중첩 클래스의 경우 partial msdn.microsoft.com/en-us/library/wa80x488(VS.80).aspx 일 수 있습니다. 나는 이것을 호기심에서 찾아 냈습니다.
John K

이것은 기본보기가 논리적 (네임 스페이스 / 클래스)이어야하며 물리적 (파일)이 아니라는 것을 보여줍니다.
David Schmitt

@DavidSchmitt는 Visual Studio에서 클래스 뷰를위한 것입니다.

14

대부분의 경우 파일 규칙 당 하나의 클래스를 따릅니다. 내가 정기적으로하는 유일한 예외는 특정 클래스와 밀접하게 연결된 열거 형의 정의입니다. 이 경우에는 해당 클래스 파일에 열거 형 정의를 자주 포함시킵니다.


12

나도 단일 파일에 하나의 유형이 포함되어야한다고 생각합니다.

이 규칙에는 한 가지 예외가 있습니다. 다음과 같은 일반적인 인수로만 다른 두 클래스가 있습니다.

RelayCommand     

RelayCommand<T>

이 경우 StyleCop을 행복하게 만드는 해결 방법을 알고 있습니까?
George Polevoy

동의하지 않으면 Foo 1.cs for Foo <T>`와 Foo 2.cs for Foo <T, T1>` 과 같은 일반 클래스에 대한 또 다른 규칙이 있습니다.
Oybek

@Oybek : Foo <T>, Foo <U> 및 Foo <U, T>가 있으면 어떻게합니까? 이제 뭐?
Andrei Rînea

@AndreiRinea이 불가능 Foo<T>Foo<U>같은 네임 스페이스 내에서. 그러나 네임 스페이스가 다르면 대개 다른 폴더에 있습니다. 따라서 대한 Foo<T>Foo<U>는 푸해야 1.cs and for 푸 <U, T>`Foo`2.cs. 그러나 여전히 파일 당 하나의 클래스입니다.
Oybek

정보 주셔서 감사합니다! :)
Andrei Rînea

8

실제로 이것은 개인적인 취향으로 요약됩니다. 모두가 "파일 당 하나의 클래스"라고 말하지만, 우리는 특정 상황에서이를 피해야 할 이유가 있습니다. 나는 약 300 개의 다른 열거 형을 가진 큰 프로젝트를 가지고있었습니다. 열거 형 중 일부가 3 상태 일 때 각 클래스마다 하나씩 300 개의 별도 파일을 가지지 않을 것입니다.

또한 이름이 지정된 파일에 모두없는 경우 특정 클래스를 찾을 수없는 사람들을 위해 전체 솔루션에서 찾기를 사용하지 않는 이유가 있습니까? 찾기를 사용하면 솔루션 탐색기를 통해 시간을 절약 할 수 있습니다.


다시 : 찾기-유형의 정의를 찾을 때 그것이 사용되는 곳을보고 싶지 않습니다. 게다가 find는 아마도 이미 네임 스페이스별로 나눈 알파벳순으로 정렬 된 파일 목록을 스크롤하는 것보다 훨씬 오래 걸립니다.
Jeff Sternal

1
네임 스페이스로 나눈 것으로 작업하고 있음을 나타냅니다. 불행히도 우리가 관리 할 수 ​​있었던 프로젝트로 항상 작업 할만큼 운이 좋은 것은 아닙니다.
Jason M

6

내용이 아무리 가벼워도 파일 당 하나의 클래스 / 인터페이스 등이 필수적이라고 생각합니다.

Visual Studio에서 큰 솔루션을 사용하는 경우 파일을 볼 수 있기 위해 파일을 볼 수 있기를 원합니다. ReSharper와 같은 탐색 도구를 사용하더라도 1 : 1 매핑이 필요합니다.

내용이 거의 없거나 전혀없는 (많은 클래스를 확장하지만 아무 것도 추가하지 않은) 많은 소스 파일을 찾으면 디자인을 다시 생각해야합니다.


5

동일한 파일에서 표준 팩토리 클래스로 클래스를 그룹화하는 것이 매우 유용하다는 것을 알았습니다.


5

나는 일반적으로 파일 당 하나의 클래스를 가지고 있지만 일반적으로 파일은 관련 클래스를 포함 할 수 있는지 확인하기 위해 자신과 다른 개발자가 재사용 할 수있는 예외 그룹화와 같은 관련 클래스를 포함해야합니다. 이 경우 사용자는 여러 파일이 아닌 하나의 파일 만 포함하면됩니다.

요점은 다음과 같습니다. 신중함을 사용해야합니다 !!!


1
진정한 지혜, 프로그래밍의 규칙은 어렵고 빠릅니다.
ChaosPandion

4

더 큰 솔루션에서는 파일 당 하나의 클래스를 갖는 것이 매우 중요하며 파일의 이름은 클래스와 동일합니다. 작업해야하는 코드를 훨씬 쉽게 찾을 수 있습니다.


나는이 주장이 ReSharper와 같은 도구에서 덜 가치가 있다고 생각합니다. CTRL + T를 수행하고 원하는 유형의 이름을 입력하기 시작합니다.
Mark

3
예. 그러나 애플리케이션 구조가 타사 도구에 종속되기를 원하십니까?
magnus

1
@ magnus 나는 이것이 그렇게하지 않는 이유가 아니라 누군가가 그것을 할 수있는 논란의 여지가 적다고 말하지 않았습니다.
Mark

4

C # 용 StyleCop 도구에는 하나의 네임 스페이스에 하나 이상의 최상위 클래스가 필요하지 않은 표준 규칙이 있으며 해당 네임 스페이스에 인터페이스, 대리자 및 열거 수가 있습니다.

두 번째 및 그 이후의 클래스가 첫 번째 클래스에서만 사용되는 두 개 이상의 클래스의 경우 소비 클래스에만 보이는 내부 클래스 일 수 있고 있어야합니다.


3
"한 네임 스페이스에 최상위 클래스가 두 개 이상 없다"고 말하면 하나의 namespace블록에 해당됩니까?
Daniel Pryden

1
SA1403으로 간주되는 규칙 : AC # 문서에는 단일 네임 스페이스 만 포함될 수 있습니다. SA1402 : AC # 문서는 모든 클래스가 부분적이고 동일한 유형이 아닌 경우 루트 수준에서 단일 클래스 만 포함 할 수 있습니다.
Steve Gilham

4

때때로 파일 당 하나의 클래스 이지만 ...

여러 클래스가 엄격하게 관련되어있는 경우 동일한 소스 파일에있는 둘 이상의 클래스는 각 클래스에 짧은 소스 파일을 전용하는 것보다 IMHO, BETTER 입니다. 소스는 더 읽기 쉽고 컴팩트합니다. #region을 사용하면 동일한 소스를 이전보다 더 체계적으로 구성 할 수 있습니다.

가끔은 있다고도 고려 는 필요한 다른 파일 (사용에서 동일한 클래스를 확산 부분 )는 20000+ 라인 소스 파일을 가지고 있기 때문에하는 것은, 심지어 내가 사용할 수있는 RAM과 편리하지 않다 (그러나 이것은 또 다른 문제이다).


물론 너무 많은 코드 줄을 가진 클래스를 피해야합니다. 1000+도 너무 커지고 있다고 말하고 싶습니다. 또한 이것이 레거시 코드에서 항상 가능하지는 않다는 것을 알고 있습니다.
피터

소스 코드를 생성하려고하면 (제 경우에는 수천 개의 진입 점이있는 스펙에서 OpenGL에 대한 C # 바인딩 생성) 많은 양의 데이터에 대해 작은 클래스를 생각하기가 어렵습니다 ...
Luca

3

때로는 작은 클래스를 더 큰 클래스로 남겨 두지 만 객체와 컬렉션 클래스 또는 팩토리와 매우 밀접하게 관련되어있는 경우에만 가능합니다.

그래도 한 가지 문제가 있습니다. 결국 작은 클래스는 자체 파일에 있어야 할 시점까지 커집니다. 새 파일로 이동하면 수정 내역에 쉽게 액세스 할 수 없게됩니다.

즉.

  • 월요일에는 파일 y.css에서 클래스 x와 y를 변경합니다.
  • 화요일에 나는 클래스 x를 자체 파일 x.css로 분리했다.
  • 수요일에 상사는 월요일에 클래스 x에서 변경된 내용을보고 싶어하므로 x.css의 기록을 볼 수 있으며 화요일에만 x.css가 기록을 표시하지 않습니다.

1
"소규모 클래스"가 클래스 이벤트의 수신자에게 정보를 전달하기위한 EventArgs의 파생물 인 경우 어떻게됩니까? 그러한 것을 다른 파일로 옮기면 코드가 더 깨끗하거나 유지 관리가 쉬워 집니까? 의심 할 여지없이, 그러한 것은 중첩 된 공립 계급이어야하지만 이것 또한 눈살을 찌푸리는 것처럼 보입니다. 개정 이력과 관련하여 클래스가 변경 로그에 나타나지 않았으며 코드 노트에 주석이 포함되어 있지 않아야합니까?
supercat

나는 클래스로 very tightly related클래스를 만들고 소량의 화면 공간 만 차지하고 다른 클래스에서 동일한 목적으로 사용하지 않는 한 그대로 둡니다.
gingerbreadboy

3

정말 문제가 되나요? :)
열거 형과 마찬가지로 실제로 작은 클래스는 다른 클래스와 함께 사용할 수 있습니다. 따라야 할 규칙이 하나 있습니다. 공통점이있는 클래스 만 모으십시오.

내 프로젝트 중 하나에 150 클래스가 들어있는 파일이 있습니다. 파일에는 10000 줄의 코드가 있습니다. 그러나 자동 생성되므로 완전히 허용됩니다 :)


1
120 개의 클래스가있는 동일한 파일과 50 만 줄의 750 개의 서브 클래스가 있으며 자동 생성됩니다. 문제는 다음과 같습니다. 클릭하면 모든 것이 중지되므로 재부팅해야합니다.
Behrooz

3

여러 관련 클래스를 하나의 파일 에 넣는 한 가지 이유 는 API를 사용하는 가난한 나쁜 녀석이 수입 신고 상용구를 입력하는 데 반나절을 소비 할 필요가없고 코드를 유지해야하는 나쁜 자식은 절반을 소비 할 필요가 없기 때문입니다 수입 신고 상용구를 스크롤하는 하루. 필자의 경험상, 거의 항상 한 번에 하나씩이 아니라 큰 클래스의 하위 집합을 거의 동시에 사용하는 경우 여러 클래스가 동일한 파일에 속합니다.


1
"수입 신고 상용구"란 무엇을 의미합니까? "문장 사용"? 그러나 클래스가 동일한 네임 스페이스에 있지 않습니까?
Joan Venge

3
@Joan : 정말 간단한 것을 달성하기 위해 15 개의 다른 모듈을 가져와야한다는 뜻입니다. C #에는 구체적으로 적용되지 않을 수 있습니다. 나는 C #을 모르지만 다른 언어에서는 꽤 성가신 문제입니다.
dsimcha

고마워 그래, 내가 혼란스러워하는 이유야
Joan Venge

2

나는 이것을한다. 그러나 클래스가 아이-부모 방식으로 관련되고 아이 클래스가 부모에 의해서만 사용되는 경우에만.


고맙지 만 다른 파일로 분리하지 않겠습니까? 그냥 궁금해서
Joan Venge

@henchman은 특히 자식 객체가 매우 작은 경우에 비해 훨씬 더 웅변 적으로 말했다. 자식 클래스가 단지 약간의 논리 만있는 속성 인 경우가 일반적입니다.
CResults

2

나는 보통 파일 당 하나의 클래스를 고수합니다. 그러나 프로젝트 전체에서 사용되는 유사한 구조의 그룹에는 예외를 적용 할 것입니다. 예를 들면 다음과 같습니다.

  • EventArgs서브 클래스 를 포함하는 EventArgs.cs 는 일반적으로 각각 5-10 줄의 코드이지만 일반적으로 여러 클래스에서 사용됩니다. 또는 EventArgs클래스를 이벤트를 선언하는 클래스와 동일한 파일에 넣을 수 있습니다.
  • 일반적으로 프로젝트마다 사용되는 Delegates가 포함 된 Delegates.cs는 보통 한 줄에 불과합니다. 다시, 대안은 그것들을 노출 / 소비하는 클래스와 동일한 파일에 넣는 것입니다.
  • enum프로젝트 전체에서 사용되는 을 포함하는 Enums.cs . ( enum한 클래스에서만 사용되는 클래스가있는 경우 일반적 private으로 해당 클래스로 작성합니다.)

2

파일과 클래스 이름이 동일한 파일 당 하나의 클래스에 대한 또 다른 투표. 저에게는 장기적인 유지 관리에 도움이됩니다. 리포지토리를 쉽게 살펴보고 프로젝트 또는 파일을 열지 않고도 솔루션의 일부 클래스를 확인할 수 있습니다.


2

나는 99 %의 시간을 따랐다. 표준을 따르는 것이 좋지만 유연성이 그 자리에 있다고 생각합니다. 때때로 그것은 단지 물건을 분해하기 위해 바보 같은 시간 낭비처럼 보입니다. 그때 나는 스스로 극복하고 코드를 작성했다.


2

지금까지의 응답은 규칙에 대한 사람들의 예외와 관련이있는 것처럼 보이므로 다음과 같습니다 .NET3.5 SP1의 DataAnnotations 패키지를 사용할 때 클래스와 해당 메타 데이터를 '버디'클래스로 유지합니다. 그렇지 않으면 항상 별도의 파일에있게됩니다. 당신은 알고 있습니다. 그렇지 않은 경우를 제외하고.


2

나는 이것을 거의하지 않습니다. 예를 들어 클래스와 밀접하게 관련되어 있지만 너무 분리하기 어려운 열거 또는 구조체가있는 경우.

또는 해당 기본 클래스에 대한 일부 확장 메소드를 포함하는 별도의 클래스.


1

One case could be:수업은 공동으로 형성 할 때 module / unit같은 몇 가지 기본 클래스 역할을하는 helper classes다른 현명한 아니오 .

ASP.NET MVC 2.0 프로젝트 소스 코드를 살펴보십시오 . 이 규칙을 엄격히 준수합니다


1

더 작은 수업을 만들고 수업이해야 할 일만하고 있다는 생각이 마음에 듭니다. 단일 문제를 해결하는 데 기여하는 클래스가 여러 개인 경우 동일한 파일로 묶는 데 아무런 해가 없습니다.

나는 MS 프랙티스가 모범 사례가 아니기 때문에 따르지 않을 것입니다!


1

다른 사람이 언급하지 않은 또 다른 요점은 파일 규칙 당 하나의 클래스를 사용하여 개발할 때 해당 특정 클래스가 사용중인 것을 쉽게 볼 수 있다는 것입니다.

예를 들어, 한 클래스는 Linq를 사용하고 다른 클래스는 그렇지 않은 두 개의 클래스가있을 수 있습니다.

이러한 클래스가 동일한 파일에 있으면 코드를 살펴 보지 않고 어떤 클래스가 무엇을 사용하는지 알 수 없습니다. 파일 당 하나의 클래스 인 경우 파일의 상단을보고 해당 클래스에서 사용중인 항목을 정확히 확인하기 만하면됩니다. 새 라이브러리 등으로 마이그레이션하는 경우 도움이됩니다.


0

지금까지 게시 된 답변에 언급되지 않은 파일 당 하나의 클래스에 대한 또 다른 이유는 파일 당 하나의 클래스가 코드 검토 중에 PR의 영향을보다 쉽게 ​​이해할 수 있기 때문입니다. 또한 병합 충돌을 줄입니다.

누군가 피드백을 위해 PR을 게시하면 변경된 파일 목록을보고 즉시 작업중인 내용과 겹치는 부분을 볼 수 있습니다. 중복에 따라 코드를 더 깊이 보거나 확인을 원할 수도 있습니다. 내 변경 사항에 영향을 미치지 않을 것이라고 확신합니다.

두 사람이 다중 클래스 파일에서 작업하고 둘 다 종속성을 추가 using하면 맨 위 블록에서 병합 충돌이 발생할 가능성이 큽니다 . 클래스를 파일로 분리하면 종속성이 분리되어 각 클래스가 무엇을 사용하고 있는지 확인할 수 있으며 이와 같은 충돌이 발생하지 않습니다.

이 규칙에는 예외가 있지만 (인터페이스 + 구현, 열거 형, ...) 주니어 개발자는 일반적으로 모든 관련없는 클래스를 동일한 파일에 묶을 수있는 반대보다 더 나은 시작 위치입니다.

파일 당 하나의 클래스는 해석이 적용되지 않는 명백한 명확한 규칙입니다.


파일 내 관련 클래스는 개인 취향과 해석에 따라 달라집니다 (여기서 다른 답변에서 사용이 가능한시기에 대해 알 수 있듯이). 따라서 잘못된 규칙입니다.


-1

앞뒤로 매우 흥미롭고 결정적으로 보이지만 내 일반적인 인상은 클래스와 파일 간의 1-1 매핑이 대부분의 의견이지만 개인마다 예외가 있다는 것입니다.

(1) Windows Forms 앱, 웹 앱, 라이브러리 등을 개발하는지에 따라 답변이 달라지는 지 궁금합니다. 또는 (2) Visual Studio 사용 여부. VS를 사용하는 경우 파일 당 하나의 클래스 규칙이 VS 프로젝트 당 하나의 클래스를 의미하는 것으로 보입니다. 다른 스레드의 의견은 VS 솔루션 / 프로젝트가 디렉토리 / 파일 이름 지정 및 구조에 미러링되어야한다는 것 같습니다. 실제로 필자는 프로젝트 이름 = 어셈블리 이름 = (중첩 된) 네임 스페이스 이름을 사용하여 디렉토리 / 파일 이름 지정 및 구조에 미러링 될 수 있다는 인상을 받았습니다. 이것이 올바른 지침 (또는 규칙)이라면, 이러한 모든 직교 조직 메커니즘은 동기화되어 유지 될 것입니다.


-1

가독성을 위해 클래스 당 하나의 파일이 있어야합니다!. 프로젝트에 뛰어 들었습니다. 하나의 파일에 많은 클래스가 있습니다. 새로운 사람이 이해하기가 너무 어려워집니다. 우리는 유지 보수성을 생각해서는 안됩니까? 우리가 소프트웨어를 개발할 때? 많은 경우 다른 개발자가 개발을 계속할 것입니다. 우리는 물건을 배열 할 네임 스페이스를 가지고 있습니다. 그렇게하기 위해 파일이 필요하지 않습니다!.


-5

파일 당 하나의 코드 항목, 예.

그 밖의 모든 것은 실습이며, 솔직히 RAD 희생의 징후입니다.

적절한 소프트웨어 개발 (IoC, 디자인 패턴, DDD, TDD 등)을 시작하자마자 "omg이 작업을 수행 할 수 있습니다. 이 규칙은 정말 중요합니다.

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