나는 모듈성이 중요하고 목표가 명확하게 유용한 상황에서 SOLID 가 무엇 을 달성하고 정기적으로 사용 하는지 이해 합니다. 그러나 두 가지로 인해 코드베이스에서 일관되게 적용 할 수 없습니다.
조기 추상화를 피하고 싶습니다. 내 경험상 구체적인 유스 케이스 (현재 또는 가까운 미래 에 존재하지 않는)없이 추상화 라인을 그리는 것은 잘못된 위치에 그려집니다. 이러한 코드를 수정하려고하면 추상화 줄이 도움이되지 않습니다. 따라서 추상화 선이 어디에 유용 할 지 알 때까지 추상화 선을 그리지 않는쪽에 실수를 저지르는 경향이 있습니다.
내 코드를 더 장황하게 이해하고 이해하기 어렵게 만들고 중복을 제거하지 않으면 자체 모듈에 대한 증가하는 모듈성을 정당화하기가 어렵습니다. 흐름이 단순하고 선형이기 때문에 간단하고 밀접하게 결합 된 절차 또는 신 객체 코드가 매우 잘 구성된 라비올리 코드보다 이해하기 쉽습니다. 쓰기도 훨씬 쉽습니다.
다른 한편으로,이 사고 방식은 종종 신의 대상으로 인도합니다. 나는 일반적으로 이것들을 보수적으로 리팩토링하고, 명확한 패턴이 나타날 때에 만 명확한 추상화 라인을 추가합니다. 모듈성이 더 필요하지 않고 중복이없고 코드를 읽을 수 있다면 God 객체와 밀접하게 결합 된 코드에 어떤 문제가 있는가?
편집 : 개별 SOLID 원칙에 이르기까지 Liskov 대체는 상식의 형식화 IMHO이며 모든 곳에 적용해야 함을 강조하고 싶습니다. 또한 모든 클래스는 추상화 수준에서 하나의 책임을 져야하지만, 구현 세부 사항이 모두 하나의 거대한 2,000 개의 라인 클래스로 채워져 있으면 매우 높은 수준 일 수 있습니다. 기본적으로 추상화는 추상화하기로 선택한 곳에서 의미가 있어야합니다. 모듈화가 명확하게 유용하지 않은 경우 질문하는 원리는 개방형, 인터페이스 분리 및 특히 의존성 반전입니다. 추상화는 의미가 아니라 모듈성에 관한 것이기 때문입니다.