문제

우리는 웹 페이지에서 많은 논리를 추상화하고 "도우미"수업을 작성하는 것 같습니다. 슬프게도이 수업은 모두 똑같이 들립니다.

Adhelper, (Active Directory) AuthenicationHelper, SharePoinThelper

다른 사람들은이 명명 대회와 함께 많은 수업을 가지고 있습니까?

도움이 되었습니까?

해결책

나는 그것이 코드 냄새로 자격이 있다고 말하고 싶습니다. 하지만 코드 냄새가 반드시 문제를 해결하는 것은 아닙니다. 그것은 당신이 조사하고 괜찮은지 결정해야 할 것입니다.

개인적으로 나는 그와 같은 이름이 값이 거의 추가되지 않는다고 개인적으로 알았으며, 너무 일반적이기 때문에 유형은 쉽게 관련이없는 유틸리티 방법의 버킷이 될 수 있습니다. 즉, 도우미 수업은 큰 클래스로 변할 수 있습니다. 일반적인 코드 냄새.

가능하다면 방법이 무엇을하는지 더 자세히 설명하는 유형 이름을 찾는 것이 좋습니다. 물론 이것은 추가 도우미 수업을 자극 할 수 있지만 이름이 도움이되는 한 숫자를 신경 쓰지 않습니다.

얼마 전에 나는 코드 검토에서 XmlHelper라는 클래스를 발견했습니다. 분명히 XML과 관련이있는 여러 가지 방법이있었습니다. 그러나 유형 이름에서 메소드가 공통적으로 가지고있는 것 (XML 관련 이외의 것 외에는 명확하지 않았습니다). 일부 방법은 XML을 형식화하고 다른 방법은 XML을 구문 분석하고 있음이 밝혀졌습니다. 따라서 IMO 클래스는 더 구체적인 이름을 가진 두 개 이상의 부품으로 나뉘어 졌을 것입니다.

다른 팁

항상 그렇듯이 상황에 따라 다릅니다.

함께 일할 때 자신의 API 나는 그것을 코드 냄새라고 생각할 것입니다. 왜냐하면 FooHelper 작동 함을 나타냅니다 Foo, 그러나 행동은 아마도 직접적으로 속해있을 것입니다. Foo 수업.

그러나 함께 일할 때 기존 API (예 : BCL의 유형), 구현을 변경할 수 없으므로 확장 방법 원래 API의 단점을 해결하는 방법 중 하나가 되십시오. 그러한 수업의 이름을 선택할 수 있습니다 FooHelper 마찬가지로 FooExtension. 똑같이 냄새가납니다.

클래스의 실제 내용에 따라 다릅니다.

많은 양의 실제 비즈니스 로직/비즈니스 규칙이 안에 도우미 수업은 그렇습니다.

수업이 실제로 다른 엔터프라이즈 애플리케이션에서 사용할 수있는 도우미 일 뿐이라면 (단어의 절대적인 의미에서 재사용-복사하지 말고 사용자 정의하지 않음), 도우미가 코드 냄새가 아니라고 말할 것입니다.

흥미로운 점입니다. 단어가 이름으로 '보일러 플레이트'가되면 아마도 실제 냄새가 아니라면 약간 칙칙한 것 같습니다. 아마도 '도우미'폴더를 사용한 다음 네임 스페이스에 나타나게하면 단어를 과도하게 사용하지 않고 계속 사용합니까?

Application.Helper.SharePoint
Application.Helper.Authentication

등등

많은 경우에, 나는 끝나는 수업을 사용합니다 Helper 확장 방법을 포함하는 정적 클래스의 경우. 나에게 냄새가 나지 않는다. 당신은 그것들을 비 정적 클래스에 넣을 수 없으며, 클래스 자체는 중요하지 않으므로 도우미는 괜찮습니다. 그러한 수업의 사용자는 어쨌든 클래스 이름을 볼 수 없습니다.

.NET 프레임 워크 도이 작업을 수행합니다 (예 : LogicalTreeHelper 몇 가지 정적 (extension) 메소드가있는 WPF의 클래스.

도우미 클래스의 코드가 클래스 계층에 맞는 객체, 즉 클래스 계층에 적합한 개체에 리팩토링되는 경우 코드가 더 나은지 스스로에게 물어보십시오. 암호 가지다 어딘가에 있고, 단순한 도우미 기능 (따라서 "도우미")과 같이 실제로 속한 클래스/객체를 만들 수 없다면 괜찮을 것입니다.

나는 그것이 코드 냄새라고 말하지 않을 것입니다. ASP.NET MVC에서는 매우 일반적입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top