그래서 아마도 많은 사람들처럼, 나는 종종 문제를 직감적으로 맞추고 원하는 이점을 갖는 디자인 패턴 / 접근법이있는 디자인 문제로 두통을 겪고 있습니다. 종종 어떤 종류의 작업없이 패턴 / 접근을 구현하기 어렵게 만드는 몇 가지주의 사항이있어 패턴 / 접근의 이점을 무효화합니다. 거의 모든 패턴 / 접근 방식을 반복하는 것은 매우 쉬운 일이 될 수 있습니다. 거의 모든 패턴 / 접근법은 실제로는 쉬운 해결책이없는 실제 상황에서 매우 중요한 경고가 있기 때문입니다.
예:
최근에 본 실제 사례를 기반으로 한 가설적인 예를 드리겠습니다. 상속 계층이 과거에 코드의 확장 성을 방해했기 때문에 상속보다 컴포지션을 사용하고 싶다고 가정 해 봅시다. 코드를 리팩터링했지만 수퍼 클래스 /베이스 클래스가이를 피하려는 시도에도 불구하고 서브 클래스에서 기능을 호출해야하는 컨텍스트가 있다는 것을 알 수 있습니다.
다음으로 가장 좋은 방법은 수퍼 클래스가 동작을 위임 할 수 있도록 또는 서브 클래스가 수퍼 클래스 이벤트를 관찰 할 수 있도록 절반 델리게이트 / 관찰자 패턴 및 절반 컴포지션 패턴을 구현하는 것 같습니다. 그런 다음 클래스의 확장 성 및 유지 관리 성이 떨어 지므로 확장 방법이 명확하지 않으며 기존 청취자 / 위임을 확장하기가 까다 롭습니다. 또한 주석을 광범위하게 사용하지 않는 한 슈퍼 클래스를 확장하는 방법을 보려면 구현을 알아야하기 때문에 정보가 잘 숨겨져 있지 않습니다.
따라서이 후 나는 단순히 관찰자 또는 대리자를 완전히 사용하여 접근 방식을 크게 혼합하는 데 따른 단점을 피할 수 있습니다. 그러나 이것은 자체 문제가 있습니다. 예를 들어, 거의 모든 행동에 대해 관찰자 / 위임자가 필요할 때까지 점점 더 많은 양의 행동을 위해 관찰자 또는 대리자가 필요하다는 것을 알 수 있습니다. 하나의 옵션은 모든 동작에 대해 하나의 큰 리스너 / 델리게이트를 갖는 것이지만 구현 클래스는 많은 빈 메소드 등으로 끝납니다.
그런 다음 다른 접근법을 시도 할 수도 있지만 그와 관련된 많은 문제가 있습니다. 다음은, 그다음은
이 반복 프로세스는 각 접근 방식이 다른 접근 방식만큼 많은 문제가있는 것처럼 보이며 설계 결정 마비로 이어질 때 매우 어려워집니다 . 또한 어떤 디자인 패턴이나 접근 방식이 사용되는지에 관계없이 코드가 똑같이 문제가된다는 것을 받아들이 기는 어렵습니다. 이 상황에서 결국 문제 자체를 다시 생각해야한다는 의미입니까? 다른 사람들이이 상황에 직면했을 때 무엇을합니까?
편집 : 내가 지우고 싶은 질문에 대한 많은 해석이있는 것 같습니다.
- 나는 OOP가 실제로 OOP에 국한되지 않았기 때문에 OOP를 완전히 제거했습니다.
- 어떤 사람들은 반복적 인 접근 방식을 취해 다른 패턴을 시도해야하거나 패턴이 작동을 멈출 때 버려야한다고 주장했습니다. 이것이 처음부터 언급하려는 프로세스입니다. 나는 이것이 예제에서 분명하다고 생각했지만 더 명확하게 만들 수 있었으므로 그렇게하기 위해 질문을 편집했습니다.