전략 패턴을 통해 읽었으며이를 구현하려고했지만 개방형 원칙을 위반한다고 생각하는 전략 구현을 결정하는 데 주저했습니다.전략 패턴 및 개방형 원칙 충돌
전략 패턴에서 우리는 인터페이스를 코딩하고 클라이언트 상호 작용을 기반으로 전략 구현을 전달합니다. 우리는 클라이언트가 위의 오픈 폐쇄 원칙에 따라 이제
IStrategy str;
if(stragety1) {
str = new Strategy1()
} else if (stragety2) {
str = new Strategy2()
} and so on..
str.run()
같은 것을 선택 전략 조건을 사용하여 결정해야합니다, 그래서 우리가 전략의 무리가 있다면 지금
는 확장 에게 열려 있지만, 그렇지 않습니다 수정 종료
향후 다른 전략 (확장)을 추가해야하는 경우이 코드를 변경해야합니다.
이 방법을 피할 수 있습니까? 아니면 전략 패턴을 구현해야합니까?
내 경험상 공개/폐쇄 원칙은 실제로 거의 가치가 없습니다. 기본 구현에는 새로운 코드를 추가하지 않고 나중에 사용자 정의 할 수있는 아키텍처 후크가 있습니다 (새로운 사용자 정의 부분에 새로운 코드 만 있음). 이것이 실전에서 실패하는 주된 이유는 코드가 야생에서 벗어나고 아무도 계획하지 않은 확장 성의 문제에 부딪 힐 때까지 아키텍처 훅에서 고려해야 할 가변성의 차원이 무엇인지 모를 수 있다는 것입니다. – ely
당신이 그들을 너무 많이 계획하려고한다면, 높은 수준의 추상화가 가능한 건축용 수프로 끝나지 만, 그것이 옳은 추상인지 아닌지는 알지 못합니다. (또한 유용성과 유지 보수성을 심하게 손상시킬 수도 있습니다). 결국 가변성의 차원이 될 가능성이 매우 높은 몇 가지 항목에 대해 사용자 지정 가능성을 구축하려고 시도 할 수 있으며 나머지 부분에서는 해결하기 위해 소스 코드를 수정해야하는 것이 일반적으로 가장 좋은 방법입니다 그것. – ely
코드가 내게 공장 패턴처럼 보입니다. – bpjoshi