네임 스페이스와 클래스 내부에 동일한 이름을 사용하면 문제가 발생합니다.
네임 스페이스에 둘 이상의 클래스가 포함되어 있으면 왜 다른 클래스를 추가해야합니까? 네임 스페이스의 이름의 목표는 단지 클래스가 아닌 그 안에있는 모든 클래스 를 설명하는 것이기 때문에 옳지 않다. 당신이있는 경우 예를 들어 JsonSerialization
, BinarySerialization
및 XmlSerialization
네임 스페이스의 클래스를, 그것은 의미 네임 스페이스에 이름을 만들 것 XmlSerialization
?
일반적으로 발생하는 것은 존재하는 네임 스페이스에서 클래스를 추출하거나 여러 클래스 또는 다른 재구성 간의 병합으로 인해 주요 클래스가 포함 된 네임 스페이스를 찾는 것입니다 . 작은 클래스는 원래 클래스와 약간 관련되어 있으므로 점진적으로 진행됩니다. 예를 들어, 네임 스페이스는 LogParser
하나의 클래스가 포함될 수 LogParser
하고 누군가 풋 LogConverter
가 매우 다음, 파서 관련이 있기 때문에, LogSearcher
등 여기에서의 문제는 네임 스페이스의 이름이 변경되지 않았 음이다 : 빨리으로 LogConverter
추가되었으며, 이름이 LogsProcessing
또는 으로 변경 되었어야합니다 Logs
.
네임 스페이스에 클래스가 하나만 있으면 코드 조직 내에서 문제의 징후 일 수 있습니다.
적절한 SOLID 원칙을 가진 단일 클래스가 코드 기반의 다른 클래스와 매우 다르고 전용 네임 스페이스에 배치 된 상황을 몇 배나 보았지만 그러한 경우는 거의 없습니다. 더 자주 이것은 문제를 나타냅니다. 마찬가지로, 단일 메소드를 포함하는 클래스를 가질 수있는 것은 없지만, 그렇지 않은 경우가 종종 있습니다.
네임 스페이스에 클래스가 하나만 포함되어 있더라도 일반적으로 클래스 이름을 지정할 때 더 구체적으로, 네임 스페이스를 지정할 때 더 일반적인 방법이 있습니다. 주어진 순간에 ABC 형식으로 작성된 파일을 DEF 형식으로 변환해야하는 응용 프로그램을 상상해보십시오. 변환은 비즈니스 오브젝트와의 직렬화 해제 / 직렬화가 필요하지 않으며, 변환 클래스 자체 내에 넣을 수있을 정도로 짧은 정규 표현식을 적용하여 수행됩니다.AbcToDefConverter
. 모든 변환 논리는 약 10 개의 상호 의존적 방법에서 약 80 개의 LLOC를 사용합니다. 기존 클래스를 분할하거나 추가 클래스를 만들 필요가없는 상황처럼 보입니다. 응용 프로그램의 나머지 부분은 변환과 관련이 없으므로 클래스는 기존 네임 스페이스의 다른 클래스와 그룹화 할 수 없습니다. 따라서이라는 네임 스페이스를 만듭니다 AbcToDefConverter
. 본질적으로 잘못된 것은 없지만,보다 일반적인 이름을 사용할 수도 있습니다 Converters
. 더 짧은 이름이 선호되고 반복이 발생하는 Python과 같은 언어에서는조차도 될 수 있습니다 converters.Abc_To_Def
.
따라서 네임 스페이스에 포함 된 클래스와는 다른 네임 스페이스에 다른 이름을 사용하십시오. 클래스 이름은 클래스가 수행하는 작업을 나타내며 네임 스페이스 이름은 클래스에 포함 된 모든 클래스에서 공통적 인 사항을 강조해야합니다.
그건 그렇고, 유틸리티 클래스는 본질적으로 잘못되었습니다 : 임의의 정밀 산술과 같은 특정 무언가를 포함하는 대신 다른 클래스에서 발견되지 않은 모든 것을 포함합니다 . 이것은 Miscellaneous
데스크톱 의 디렉토리 처럼 조직의 부족을 나타내는 잘못된 이름 지정 입니다.
명명은 이유가 있습니다. 나중에 물건을 찾아야 할 때 인생을 더 쉽게 만들기 위해서입니다. 차트를 그려야 할 경우“차트”또는“플롯”을 검색 할 수 있습니다. 앱에서 인보이스를 생성하는 방식을 변경해야하는 경우 "인보이스 [e / ing]"또는 "청구서"를 검색합니다. 마찬가지로“음,이 기능은 기타에있을 것입니다.”라고 스스로에게 말할 경우를 상상해보십시오. 난 못해
.NET Framework를보십시오. 대부분의 클래스는 유틸리티 클래스가 아닌가? 비즈니스 영역과 관련이 거의 없습니다. 금융 앱이나 전자 상거래 웹 사이트 또는 차세대 교육 플랫폼에서 작업하는 경우 XML을 직렬화하거나 파일을 읽거나 SQL 쿼리를 수행하거나 트랜잭션을 수행하는 것은 모두 유용한 일입니다. 그러나 UtilitySerialization
또는로 호출 UtilityTransaction
되지 않으며 Utility
네임 스페이스에 없습니다 . 그들은 적절한 이름을 가지고 있으므로 필요할 때 찾을 수 있습니다 (그리고 .NET 개발자에게 감사합니다!).
동일은을 위해 오는 당신의 당신이 일반적으로 귀하의 응용 프로그램에 재사용 클래스. 그들은 유틸리티 클래스가 아닙니다. 그것들은 특정한 일을하는 수업이며, 실제로하는 일은 실제로 수업의 이름이어야합니다.
단위와 단위 변환을 다루는 코드를 만들었다 고 상상해보십시오. 당신은 그것을 이름을 Utility
짓고 동료들로부터 미워할 수 있습니다 . 또는 당신은 그것을 이름을 수 Units
및 UnitsConversion
.