나는 이것이 논란의 여지가있는 메타 답변 일 수 있다고 생각하고, 나는 파티에 약간 늦었지만 여기에서 언급하는 것이 매우 중요하다고 생각합니다. 왜냐하면 나는 당신이 어디에서 왔는지 알기 때문입니다.
디자인 패턴이 사용되는 방식의 문제점은, 가르 칠 때 다음과 같은 경우를 제시한다는 것입니다.
이 특정 시나리오가 있습니다. 이 방법으로 코드를 구성하십시오. 다음은 똑똑해 보이지만 다소 고안된 예입니다.
문제는 실제 엔지니어링을 시작할 때 상황이 그리 커지지 않는다는 것입니다. 읽은 디자인 패턴은 해결하려는 문제에 맞지 않습니다. 말할 것도없이 여러분이 사용하는 라이브러리는 각각의 고유 한 방식으로 패턴을 설명하는 텍스트에 언급 된 모든 것을 위반하는 것입니다. 결과적으로, 작성한 코드는 "잘못된 느낌"이되며 이와 같은 질문을합니다.
이 외에도 소프트웨어 엔지니어링에 관해 이야기 할 때 Andrei Alexandrescu를 인용하고 싶습니다.
소프트웨어 공학은 다른 공학 분야보다 훨씬 다양합니다. 여러 가지 올바른 방법으로 동일한 작업을 수행 할 수 있으며 옳고 그름 사이에는 무한한 뉘앙스가 있습니다.
아마도 이것은 약간의 과장이지만, 이것이 코드에 대한 자신감이 떨어지는 추가 이유를 완벽하게 설명한다고 생각합니다.
Insomniac의 게임 엔진 책임자 인 Mike Acton의 예언적인 목소리가 내 머릿속에서 비명을 지르는 것은 이와 같은시기입니다.
데이터를 알고
그는 프로그램의 입력과 원하는 출력에 대해 이야기하고 있습니다. 그리고 Mythical Man Month의 Fred Brooks 보석이 있습니다.
순서도를 보여주고 테이블을 숨기면 계속해서 미스터리됩니다. 표를 보여주십시오. 일반적으로 흐름도가 필요하지 않습니다. 그들은 명백 할 것이다.
그래서 내가 당신이라면, 나는 전형적인 입력 사례와 원하는 올바른 출력을 달성하는지에 따라 내 문제에 대해 추론 할 것입니다. 그리고 다음과 같은 질문을하십시오 :
- 내 프로그램의 출력 데이터가 정확합니까?
- 가장 일반적인 입력 사례를 위해 효율적으로 / 빠르게 생산됩니까?
- 저와 제 동료 모두를 위해 현지 코드를 쉽게 추론 할 수 있습니까? 그렇지 않다면 더 간단하게 만들 수 있습니까?
그렇게 할 때, "얼마나 많은 레이어의 추상화 또는 디자인 패턴이 필요한지"라는 질문에 대한 대답이 훨씬 쉬워집니다. 얼마나 많은 추상화 계층이 필요합니까? 이러한 목표를 달성하기 위해 필요한만큼, 그 이상은 아닙니다. "디자인 패턴은 어떻습니까? 나는 전혀 사용하지 않았습니다!" 패턴을 직접 적용하지 않고 위의 목표를 달성했다면 괜찮습니다. 작동하게하고 다음 문제로 넘어갑니다. 코드가 아닌 데이터에서 시작하십시오.