프로그래밍 할 때 우리 모두는 우리가 사용하고 의존하는 관행과 패턴을 개발합니다. 그러나 시간이 지남에 따라 우리의 이해, 성숙도, 심지어 기술 사용이 변경됨에 따라 우리가 한때 훌륭하다고 생각했던 일부 관행이 그렇지 않거나 더 이상 적용되지 않는다는 것을 깨닫게됩니다.
한때 자주 사용했지만 최근 몇 년 동안 변경된 사례는 Singleton 객체 패턴을 사용하는 것입니다 .
내 자신의 경험과 동료들과의 긴 토론을 통해 싱글 톤이 항상 바람직한 것은 아니라는 것을 깨달았습니다. 싱글 톤은 테스트를 더 어렵게 만들 수 있고 (모킹과 같은 기술을 억제함으로써) 시스템 부분 사이에 바람직하지 않은 결합을 만들 수 있습니다. 대신, 이제는 신경 쓰지 않거나 알 필요가없는 시스템 부분에서 싱글 톤의 특성과 존재를 숨기는 객체 팩토리 (일반적으로 IoC 컨테이너 사용)를 사용합니다. 대신, 이러한 개체에 대한 액세스 권한을 얻기 위해 공장 (또는 서비스 로케이터)에 의존합니다.
자기 계발 정신으로 커뮤니티에 대한 나의 질문은 다음과 같습니다.
- 최근에 어떤 프로그래밍 패턴이나 관행을 재고하고 이제 피하려고하십니까?
- 무엇으로 교체하기로 결정 했습니까?
답변
//Coming out of university, we were taught to ensure we always had an abundance
//of commenting around our code. But applying that to the real world, made it
//clear that over-commenting not only has the potential to confuse/complicate
//things but can make the code hard to follow. Now I spend more time on
//improving the simplicity and readability of the code and inserting fewer yet
//relevant comments, instead of spending that time writing overly-descriptive
//commentaries all throughout the code.
답변
단일 리턴 포인트.
나는 루틴에 필요한 정리가 간과되지 않도록 보장 할 수 있었기 때문에 각 메소드에 대해 단일 리턴 포인트를 선호했습니다.
그 이후로 저는 훨씬 더 작은 루틴으로 이동했습니다. 따라서 정리를 간과 할 가능성이 줄어들고 실제로 정리 의 필요성 이 줄어 듭니다. 그리고 조기 반환이 코드의 명백한 복잡성 (중첩 수준)을 감소 시킨다는 것을 알게되었습니다. 단일 반환점의 아티팩트 ( “결과”변수 유지, 플래그 변수 유지, 아직 완료되지 않은 상황에 대한 조건절 유지)는 코드가 실제보다 훨씬 더 복잡해 보이게하고 읽기 및 유지 관리를 어렵게 만듭니다. 초기 출구와 더 작은 방법이 갈 길이다.
답변
- 첫 번째 시도에서 완벽하게 코딩하려고합니다.
- 코딩하기 전에 완벽한 OO 모델을 만들려고합니다.
- 유연성과 향후 개선을 위해 모든 것을 설계합니다.
한마디로 오버 엔지니어링 .
답변
헝가리 표기법 (양식 및 시스템 모두). 나는 모든 것을 접두사로 사용했습니다. strSomeString 또는 txtFoo. 이제 someString 및 textBoxFoo를 사용합니다. 새로운 누군가가 와서 픽업하기가 훨씬 더 읽기 쉽고 쉽습니다. 추가 보너스로 일관성을 유지하는 것은 사소한 일입니다. 컨트롤을 camelCase하고 유용하고 설명적인 이름을 추가합니다. Forms Hungarian은 항상 일관성이 없다는 단점이 있으며 Systems Hungarian은 실제로 많은 것을 얻지 못합니다. 모든 변수를 함께 묶는 것은 특히 최신 IDE의 경우 그다지 유용하지 않습니다.
답변
“완벽한”아키텍처
저는 몇 년 전에 THE 아키텍처를 생각해 냈습니다 . 100 % 느슨하게 결합 된 레이어, 광범위한 델리게이트 사용, 경량 오브젝트가되도록 기술적으로 최대한 밀어 붙였습니다. 기술의 천국이었습니다.
그리고 그것은 쓰레기였습니다. 아키텍처의 기술적 순수성은 결과에 대한 완벽 함을 목표로 개발 팀의 속도를 늦추고 거의 완전한 실패를 달성했습니다.
이제 기술적으로 완벽하지 않은 아키텍처가 훨씬 단순 해졌고 제공 속도가 급증했습니다.
답변
카페인 사용. 그것은 한때 나를 깨우고 영광스러운 프로그래밍 분위기로 유지했습니다. 이제는 아무 일도하지 않으며, 없으면 두통이 생깁니다.
답변
코드 주석 처리. 나는 코드가 소중하고 자신이 만든 아름다운 보석을 삭제할 수 없다고 생각했습니다. 이제는 주석 처리 된 코드를 삭제합니다. 주석 처리 된 코드는 그대로두기에는 너무 위험하기 때문에 첨부 된 TODO 또는 NOTE가없는 경우 삭제합니다. 재치로, 주석 처리 된 부분이 많은 오래된 클래스를 보았는데 왜 그런지 혼란 스러웠습니다. 거기에 있었습니까 : 그들은 최근에 주석을 달았습니까? 이것은 개발 환경 변경입니까? 이 무관 한 차단을하는 이유는 무엇입니까?
코드를 주석 처리하지 않고 대신 삭제하는 것을 진지하게 고려하십시오. 필요한 경우 여전히 소스 제어에 있습니다. 그래도 YAGNI.