동일한 파일에 여러 클래스를 사용하는 것이 나쁜 습관입니까?
나는 하나의 파일에 대해 하나의 클래스를 가지고 있습니다. 예를 들어 car.cs 에는 car 클래스가 있습니다 . 그러나 더 많은 클래스를 추가하고 있습니다. 예를 들어 car.cs 에는 car 클래스 와 door 클래스 등이 있습니다.
내 질문은 Java, C #, PHP 또는 기타 프로그래밍 언어에 적합합니다. 많은 파일에 여러 클래스를 포함하지 있으며, 아니면 괜찮습니다?
코드를 파일 당 1 개의 클래스로 유지해야한다고 생각합니다.
나중에 수업을 더 쉽게 사용할 수 있기 때문에 제안합니다. 또한 소스 제어 시스템에서 더 잘 작동합니다 (파일이 변경되면 특정 클래스가 변경 알 수 있습니다).
파일 당 두 개 이상의 클래스를 사용하는 것이 옳다고 생각하는 유일한 경우는 내부 클래스를 사용할 때입니다. 그러나 내부 클래스는 다른 클래스 안에 존재하는 파일에 남아있을 수 있습니다. 내부 클래스 역할은 외부 클래스와 고급 관련이 있으므로 파일에 배치하는 것이 좋습니다.
Java에서는 파일 당 하나의 공용 클래스가 언어가 작동하는 방식입니다. Java 파일 그룹을 패키지로 수집 할 수 있습니다.
여러 개의 단일 클래스가 있습니다. Python 패키지는 Java 패키지와 같은 디렉토리입니다.
이는 추가적인 수준의 그룹화를 제공합니다.
언어에 구애받지 않는 정답은 없습니다. 언어에 따라 증가합니다.
파일 당 하나의 클래스가 좋은 규칙이지만 몇 가지 예외를 만드는 것이 설명합니다. 예를 들어, 대부분의 클래스에 관련된 컬렉션 유형이있는 프로젝트에서 작업하는 경우 클래스와 컬렉션을 동일한 파일에 보관합니다. 예 :
public class Customer { /* whatever */ }
public class CustomerCollection : List<Customer> { /* whatever */ }
경험상 가장 좋은 방법은 파일 당 하나의 클래스를 유지하는 것입니다. 단, 작업이 더 어려워지기 시작하는 경우 제외하고 예외입니다. Visual Studio의 파일에서 찾기는 매우 쉽기 때문에 파일 구조를 볼 때 많은 시간을 할애 할 필요가 없을 것입니다.
아니요, 전적으로 나쁜 습관이라고 생각하지 않습니다. 내가 의미하는 것은 일반적으로 클래스마다 별도의 파일을 여러 것이 가장 좋지만 한 파일에 여러 클래스를 포함하는 것이 더 좋은 예외 사례가있는 것입니다. 이에 대한 좋은 예는 Exception 클래스 그룹입니다. 주어진 그룹에 대해 각각의 클래스가 클래스를 가지고있는 경우에 2 개의 라이너에서 별도의 파일을 설치합니까? 나는 주장하지 않을 것입니다. 이 경우 한 클래스에서 예외 그룹을 훨씬 덜 번거롭고 단순한 IMHO입니다.
여러 유형을 하나의 파일로 결합 할 때마다 쉽게 제거 할 수 있기 때문에 항상 뒤로 돌아가서 분리 할 수 있습니다. 내가 결합 할 때마다 내가 정의한 유형 x를 알아 내려는 순간이 항상 있습니다.
이제 내 개인적인 규칙은 각 인성 유형 (아마도 상속 된 클래스가 아닌 클래스 내부의 클래스를 의미하는 하위 클래스 제외)이 자체 파일을 가져 오는 것입니다.
팀에서 작업하는 경우 클래스를 별도의 파일에 보관하면 소스를 더 쉽게 제어하고 충돌 할 가능성이있는 파일을 변경할 수 있습니다. 쉽게 찾을 수있는 코드를 더 쉽게 찾을 수 있습니다.
사이트 개발 및 유지 관리에서 나쁠 수 있습니다. Car.cs 클래스가 있으면 Car 클래스가 어디에 있는지 기억하는 것이 좋습니다. Widget.cs가 어디에 있습니까? 자동차 위젯인가요? 엔진 위젯입니까? 오 아마도 베이글 위젯 일 수 있습니다.
내가 항상 따르는 규칙 은 동일한 이름을 가진 파일에 하나의 메인 클래스를 가진 파일 입니다. 해당 파일에 포함되어 있지 않을 수 있습니다. 지원 클래스는 독립형입니까, 아니면 자체적으로 유용합니까? 예를 포함하는 클래스, 클래스하기의 메서드가 비교 어 클래스와 클래스하기 위해 특별한가 필요한 경우 비교 펑하는 방법을 사용하는 두는 것이 조금 귀찮지 언어입니다. 나는 그것을 사용하기를 기대하지 않을 것입니다.
파일 위치를 고려 하는 유일한 경우 는 새 클래스를 선택 할 때입니다. 확장 된 파일 구조로 탐색하지 않습니다 . 나는 "수업으로 가기"또는 "정의로 가기"를 사용합니다.
나는 다소 훈련 문제라는 것을 알고 있습니다. 프로젝트의 실제 파일 구조에서 벗어나려면 연습이 필요합니다. 그래도 매우 보람이 있습니다.)
같은 파일에 넣는 것이 기분이 좋다면 내 손님이되어주세요. 그래도 자바의 공용 클래스에서는 그렇게 할 수 없습니다.)
당신 때문에 IDE가 에 "당신을 제공 하는 이동 기능"및 일부 제어가 의 네임 하여 동일한 파일 내에서 여러 클래스를 가지고의 혜택 아래 다음 클래스 내를 나에게 그것은 매우 가치가 있습니다.
부모-자식 클래스
의 경우 대부분 기본 클래스 파일 내에 상속 된 클래스 가있는 것이 매우 유용 합니다.
하위 클래스가 상속하는 속성과 메소드를 쉽게 확인할 수 있습니다. 파일은 전체 기능에 대한 더 빠른 개요를 제공합니다.
공개 : 소규모-도우미 -DTO 클래스
특정 기능을 위해 여러 개의 평범 하고 작은 클래스 가 필요할 때 모든 참조가있는 파일이 4-8 개의 Liner 클래스를 포함 하는 것이 좋습니다 .
코드 탐색은 또한 10 개의 파일 사이를 전환하는 대신 하나의 파일 위로 스크롤하기 만하면 더 많은 것입니다. 또한 10 개의 개가 아닌 하나의 참조 만 편집해야 할 때 리팩토링 하기가 더 부담 .....
전체적으로 파일 당 클래스 1 개의 철 규칙을 위반하면 코드를 구성 할 수 있는 추가 자유 가 제공 됩니다.
그때 일어나는 일은 IDE, 언어, 팀 커뮤니케이션 및 조직 기술에 달려 있습니다.
하지만 그 자유를 부담해야하는 이유는 무엇입니까?
일반적으로 하나의 클래스 / 하나의 파일을 사용하면됩니다. 하지만 종종 하나의 파일에 여러 인터페이스 정의를 보관합니다. 하나의 파일에 여러 클래스가 있습니까? 어떻게 든 매우 작은 경우 에만 (<5 방법 및 구성원)
프로그래밍에서 많은 시간이 그렇듯이 상황에 따라 크게 달라집니다.
예를 들어, 해당 클래스의 부 동력은 무엇입니까? 어디에 있습니까? 완전히 직각입니까? 기능면에서 관련이 있습니까?
웹 프레임 워크가 범용 위젯. BaseWidget, TextWidget, CharWidget 등을 포함하는 파일을 제공합니다.
프레임 워크의 사용자는 특정 도메인 공간에 대한 프레임 워크 위젯에서 파생 된 추가 위젯을 포함하도록 more_widgets 파일을 정의하는 데있어 라인을 벗어나지 언어를 사용합니다.
클래스가 직교하고 서로 관련이없는 경우 단일 파일로 그룹화하는 것이 실제로 인위적입니다. 자동차를 만드는 로봇 공장을 관리하는 애플리케이션을 가정 해 보겠습니다. CarParts 및 RobotParts를 포함하는 부품이라는 파일은 무의미합니다. 유지 보수를위한 예비 부품 주문과 공장에서 제조하는 부품 사이에 많은 관계가 없을 것입니다. 더 나은 결합은 설계중인 시스템에 대한 정보 나 지식을 추가하지 않습니다.
아마도 가장 좋은 경험 법칙은 경험 법칙으로 선택을 제한하지 않는 것입니다. 경험 법칙은 첫 번째 컷 분석을 위해 또는 좋은 선택을 할 수없는 사람들의 선택을 제한하기 위해 만들어집니다. 대부분의 프로그래머는 자신이 좋은 결정을 내릴 수 있다고 믿고 싶어합니다.
정당한 이유가없는 한 그렇게하지 마십시오.
여러 개의 작은 관련 클래스가있는 하나의 파일은 여러 파일보다 더 읽기 쉽습니다. 예를 들어, '케이스 클래스'를 사용하여 공용체 유형을 시뮬레이션하는 경우 각 클래스간에 강력한 관계가 있습니다. 여러 클래스에 동일한 파일을 사용하면 독자를 위해 시각적으로 그룹화 할 수있는 이점이 있습니다.
귀하의 경우에는 자동차와 문이 전혀 관련이없는 것처럼 보이며 car.cs 파일에서 문 클래스를 찾는 것은 예상치 못한 일이므로 그렇게하지 마십시오.
파일 당 하나의 클래스는 유지 관리가 더 간단하고 코드를 보는 다른 사람에게 훨씬 더 명확합니다. 또한 일부 언어에서는 필수이거나 매우 제한적입니다.
예를 들어 Java에서는 파일 당 여러 최상위 클래스를 만들 수 없으며 클래스 이름과 파일 이름이 동일한 별도의 파일에 있어야합니다.
Smalltalk의 대답은 다음과 같습니다. (프로그래밍을 위해) 파일이 없어야합니다. 그들은 버전 관리 및 탐색을 어렵게 만듭니다.
'ProgramingTip' 카테고리의 다른 글
NSUserDefaults에 NSMutablearray를 저장하는 방법 (0) | 2020.11.29 |
---|---|
mysql 함수의 영숫자 텍스트에서 선행 0을 자르는 방법 (0) | 2020.11.29 |
작업 표시 줄 상단에 Windows Form을 전체 화면으로 표시하는 방법은 무엇입니까? (0) | 2020.11.29 |
MySQL Workbench에서 Blob을 직접 보는 방법 (0) | 2020.11.29 |
Android- 문자열의 일부를 다른 URL로 바꾸는 방법은 무엇입니까? (0) | 2020.11.29 |