SRP의 목적은 클래스가 너무 많이 수행하는 경우를 식별하는 것이고 더 나은 디자인은 여러 클래스를 갖는 것입니다. 예를 들어, ReportProducer 클래스는 데이터를 어셈블하기 위해 일부 작업을 수행하고 출력 형식을 지정하기 위해 더 많은 작업을 수행합니다. 수집을위한 클래스와 서식 지정을위한 클래스 등 두 가지 클래스가 있어야합니다. 이러한 접근 방식의 이점은 유연성입니다. 단일 수집 클래스와 여러 가지 다양한 형식 클래스를 사용할 수 있습니다.
예제가 매우 합리적이며, 일관된 클래스가 있으며, 모든 메소드가 관련되어 있으므로 클래스 사용자는이 클래스가 Orders를위한 클래스라는 것을 알고 있습니다. 이것은 나에게 하나의 책임처럼 보입니다.
변경 이유는 무엇입니까? 보고서 예에서 완전히 다른 두 가지 종류의 변경 사항이 있습니다. 데이터가 변경된 부분이나 원하는 형식 변경 일 것입니다. 예를 들어, 여러 가지 가능한 이유가 있다고 주장 할 수도 있습니다. 즉, 주문의 "모양"이 바뀔 수 있고, 원하는 인터페이스가 변경 될 수 있습니다 (예 : queryCancelledOrders() 메소드 추가). 변경 될 수 있습니다. 그러나 나는 이것이 당신이 SRP를 위반한다는 징후라고 믿지 않습니다 : 그들은 모두 명령을 조작하기위한 인터페이스를 제시하는 것과 관련이 있습니다.
"변화를위한 단일 이유"를 완전히 그대로 사용한다면 우리는 어떤 수업을 쓸 수 있다고 생각하지 않습니다. 우리는 항상 인터페이스와 구현, 그리고 대개 일부 종속 클래스를 가지고 있습니다. 그 중 하나가 변경 될 수 있으므로 변경을위한 이유는 최소한 두 가지, 아마도 세 가지가있을 수 있습니다.
"이 수업의 책임은 무엇입니까?" "AND"와 같은 단어를 사용하지 않고 문장으로 표현할 수 있습니까? 불량 : 데이터 및 형식 보고서를 수집합니다.
감사합니다. "그래서 여기에 외관 패턴의 사용을 재검토하는 것이 재미 있을지 모릅니다." 너의 제안은 뭐니? – Masoud
불행하게도 시스템에 대해 더 알지 못하면 말하기가 어렵습니다. 좋은 출발점은 왜 당신이 파사드 패턴을 필요로한다고 생각하는지 생각하는 것입니다. 하나를 사용해야하는 타당한 이유가 있습니다. 귀하의 이유가 그들 중 하나가 아니라면, 당신은 단지 시스템에 복잡성을 추가 할 수 있습니다. –