최근에 깨끗한 코드 개발에 관한 웹 사이트를 읽고 있습니다 (영어가 아니기 때문에 여기에 링크를 두지 않습니다).
이 사이트에서 광고하는 원칙 중 하나는 공개 폐쇄 원칙입니다 . 각 소프트웨어 구성 요소는 확장을 위해 개방되고 수정을 위해 폐쇄되어야합니다. 예를 들어, 클래스를 구현하고 테스트 한 경우 버그를 수정하거나 새로운 기능 (예 : 기존 기능에 영향을 미치지 않는 새로운 메소드)을 추가하기 위해 클래스 만 수정해야합니다 . 기존 기능 및 구현을 변경해서는 안됩니다.
나는 보통 인터페이스 I
와 해당 구현 클래스 를 정의하여이 원칙을 적용한다 A
. 수업 A
이 안정 되면 (구현되고 테스트 된), 나는 보통 너무 많이 수정하지 않을 것입니다.
- 새로운 요구 사항이 코드에 큰 변화를 요구 (예를 들어, 성능 또는 인터페이스의 완전히 새로운 구현을) 도착하면, 나는 새로운 구현을 작성
B
하고, 계속 사용A
긴만큼B
성숙되지 않습니다.B
성숙 되면I
인스턴스화 방법을 변경하기 만하면됩니다. - 새로운 요구 사항이 인터페이스 변경을 제안하는 경우 새 인터페이스
I'
와 새로운 구현을 정의합니다A'
. 그래서I
,A
냉동하고 유지 구현 긴만큼 생산 시스템I'
및A'
이를 대체 할 안정적인 충분하지 않다.
따라서 이러한 관찰에 비추어 볼 때 웹 페이지가 복잡한 리팩토링 의 사용을 제안한 것에 약간 놀랐습니다 . "... 최종 형태로 코드를 직접 작성할 수 없기 때문입니다."
공개 / 폐쇄 원칙 시행과 복잡한 리팩터링 사용을 모범 사례로 제안하는 것 사이에 모순 / 충돌이 없는가? 또는 여기서 아이디어는 클래스를 개발하는 동안 복잡한 리팩토링을 사용할 수 A
있지만 클래스가 성공적으로 테스트되면 동결되어야합니까?