나는 여러 권의 책을 읽고 소프트웨어 디자인에 관한 강의를 듣습니다. 하지만 OO 설계에 따른 문제를 해결하는 방법을 모르겠습니다.단일 책임 원칙의 단점
여기에 어떤 상황이 있습니다. 간단한 단일 클래스 (ClassA)를 디자인하기 시작합니다. 그런 다음 ClassA는 비슷한 책임으로 자랍니다. Single Responsibility Priciple에 따르면 ClassA에서 ClassB로 로직을 추출합니다. ClassA가 다시 충분히 단순 해집니다. 그러나 ClassA의 책임은 ClassB, 의 책임과 유사 할 수 있으므로 ClassA와 ClassB는 서로를 구성원 필드 또는 협력 속성으로 참조해야합니다. 즉, 클래스의 분리는 또 다른 복잡성을 만듭니다. 이것은 분리 된 클래스 간의 상호 작용입니다. 이후부터 ClassA와 ClassB 각각은 더 복잡한 책임을 가지고 성장할 수도 있습니다 ( ). 일부 클래스 (ClassC 또는 ClassD)는 ClassA 또는 ClassB로부터 분리 될 수 있습니다. 이제 클래스 간의 상호 작용이 훨씬 더 복잡해졌습니다. 각 클래스는 다른 클래스에 대한 참조를 구성원 필드 또는 메서드 매개 변수로 가질 수 있습니다.
단일 클래스가 단순 해짐에 따라 클래스 수가 증가하고 관계의 복잡성 및 클래스 간 상호 작용이 증가합니다.
어떤 경우에는 설계 패턴에 의해 해결 될 수 있습니다. 그러나 많은 경우에 클래스의 분리는 클래스의 관계를 더 복잡하게 만듭니다. 및 기타 클래스에 대한 참조가 너무 많은 클래스를 생성하는 경향이 있습니다. 다른 클래스에 대한 참조가 너무 많은 클래스는 테스트하기가 어렵습니다.
몇 가지 OO 설계 도서를 읽었습니다. 그들 중 대부분은 간단한 수업이 좋은 것이라고 이야기합니다. 그러나 이들 중 누구도 SRP로 인한 클래스 상호 작용의 복잡성에 초점을 맞추지 않습니다.
내가 무엇인가 놓친가요? 이 문제를 어떻게 해결할 수 있습니까?
일반적으로 각각의 책임에는 복잡한 책임이있는 클래스가 적은 것보다 더 많은 클래스가있는 것이 바람직합니다. 설명하는 상황은 SRP를 유지하기 위해 리팩터링 한 결과입니다. –