디자인 패턴이 올바르게 구현되었는지 확인하는 방법은 무엇입니까?


13

문서화 된 디자인 패턴을 사용하지 않은 모든 이전 응용 프로그램을 성공적으로 확장 할 수 있습니다. 그것이 무엇인지 모르는 것입니다. 대체로 간단한 OOP 개념 만 사용해야한다는 느낌이 들었습니다.

디자인 패턴 개념은 복잡하고 이해하기 어렵습니다. 구현할 때 구현이 올바른지 여부와 응용 프로그램이 실제로 느슨한 결합을 가지고 있는지 확인하는 방법은 무엇입니까?


49
심각한 디자인 패턴이 무엇인지에 대한 오해. 그들은 당신이 그것을 더 잘 만들기 위해 응용 프로그램을 뿌려주는 마법의 요정 먼지가 아닙니다. 이들은 주로 문제를 해결하기 위해 일반적으로 사용되는 방법에 대해 이야기 할 수있는 공통 어휘 입니다. "패턴"이라는 단어를 듣지 않고 하루 종일 "정확하게 패턴을 구현하는"사람들 이 많이 있을 것입니다.
Joachim Sauer

2
@JoachimSauer 방금 말한 것은 기술 대학이 가르쳐야 할 것들입니다. 저는 현재 학생이기 때문에 이것이 현재 저를 가장 화나게하는 것입니다.
Radu Murzea

1
@JoachimSauer 사실 이러한 오해는 동일한 패턴에 대해 다양한 구현 기술이 있기 때문에 발생합니다. MVC와 MVP를 예로 들자면, 프로젝트와 동일한 패턴의 다양한 변형이 있습니다.
RPK

@RPK +1, 수많은 MVX 패턴 (MVC, MVP, MVA, MVVM 등)이 있다는 사실은 똑같이 실행 가능한 방법이 많이 있음을 분명히 나타냅니다.
MattDavey

답변:


3

대답을 간결하게 유지하려면 코드에 다음과 같은 특성이 표시되면 의도적 인 노력을 기울이지 않아도 (패턴이 아님) 패턴이 적용되었다고 확신 할 수 있습니다.

원하는 특성 :

  1. 코드베이스는 단위 수준에서 테스트 할 수 있습니다
  2. 변경 요청을 구현할 때마다 도메인에서 서로 관련된 관련 클래스 만 변경합니다.
  3. 코드베이스에 소프트웨어 엔트로피 가 표시되지 않습니다 .

그래도 실제 패턴 이름으로 코드를 식별하고 태그를 지정하는 데 관심이 있다면 볼 롤링을 얻기 위해 다음 작업을 수행하는 것이 좋습니다.

  1. 코드베이스를 리버스 엔지니어링하여 몇 개의 UML 다이 그램을 생성하십시오.
  2. 패턴 참조 자료의 준비된 참조 와 다이어그램을 시각적으로 비교하십시오 .

이것은 당신에게 공정한 아이디어를 줄 것입니다.


세 번째에 대해 더 자세히 설명해 주시겠습니까?
Niing

19

디자인 패턴과 커플 링을 모두 언급했습니다. 이것들은 별개의 개념이므로 따로 다루겠습니다. 유일한 연결은 디자인 패턴이 느슨한 커플 링을 촉진하는 경향이 있다는 것입니다 (좋은 디자인의 주요 측면이므로).

디자인 패턴

디자인 패턴의 개념은 실제로 매우 간단합니다. 다양한 일반적인 문제를 처리하는 방법에 대한 템플릿 모음 일뿐입니다. 그들이 인기있는 두 가지 주요 이유가 있습니다.

  1. 그것들은 '증명 된'것이다 : 그들은 여러 번 전에 사용되어 왔으며 각각의 장점 / 단점은 일반적으로 알려져 있으며, 특히 큰 문제를 일으킬 수있는 미묘한 문제가 알려져있다.
  2. 일반적인 용어 집합을 제공하므로보다 쉽게 ​​의사 소통 할 수 있습니다. 누군가 "클래스 X가 관찰자 패턴에서 관찰자의 역할을한다"고 말하면 패턴에 익숙한 개발자는 진행중인 작업을 즉시 파악할 수 있습니다.

올바르게 구현했는지 어떻게 알 수 있습니까? 까다로운 일입니다. 대부분의 패턴은 간단합니다. 패턴을 정리했거나하지 않았습니다. 일부 패턴은 다른 패턴보다 명확하게 정의되지 않습니다 (예 : model-view-controller) . 이와 같은 패턴은 일반적인 지침으로 더 잘 사용됩니다. 패턴을 구현하는 이유와 패턴이 존재하는 이유를 이해하는 것보다 구현 방법의 세부 사항이 덜 중요합니다.

디자인 패턴은 '진정한 방법'이 아닙니다. 종종 특정 목적에 맞게 조정해야하거나 때로는 요구 사항에 맞는 패턴이 없을 수도 있습니다. 맞지 않는 곳에 디자인 패턴을 강요하는 것은 나쁜 생각입니다. 실제로 원하는 것이 드라이버 일 때 정말 좋은 망치를 사용하는 것과 같습니다.

커플 링

이것은 컴퓨터 과학에서 정말 중요한 아이디어입니다. 대부분의 소프트웨어 프로젝트에 대한 요구 사항은 시간이 지남에 따라 (때로는 크게) 변경되기 때문에 설계가 변경에 대처하는 능력이 중요합니다. 커플 링은 기본적으로 "이 구성 요소를 다른 구성 요소로 교체하기가 얼마나 어려울까요?"의 척도입니다. 'component'는 메소드, 클래스, 패키지, 라이브러리 등이 될 수 있습니다.

이 Wikipedia 기사 에는 다양한 유형의 커플 링이 나열되어 있습니다.


2

답은 실제로 디자인 패턴을 처음부터 작성하려는 목적입니다. 왜 유연성을 원하십니까?

그것은 변화입니다. 요구 사항 변경. 코드 변경에 반영되는 요구 사항을 변경하고 얼마나 쉬운 지 알아보십시오.


-1

디자인 패턴을 사용하는 것은 예방 조치입니다. 나중에 응용 프로그램을 확장 할 때 디자인 패턴을 사용하여 작업을 용이하게합니다. 물론 나중에 작업을 쉽게하려면 지금 약간 더 많은 작업을 수행해야합니다. 실제 질문은 앞으로 얼마나 많은 변화를 기대할 수 있고이 변화가 무엇인지에 대한 것입니다. 확장 성과 유연성이 필요하지 않으면 디자인 패턴을 제거 할 수 있습니다.

디자인 패턴 자체는 객체 지향 디자인 원칙의 구현입니다. 이러한 원칙을 따르는 한 응용 프로그램은 유연하고 확장 가능합니다. 실제 디자인 패턴이없는 경우에도 마찬가지입니다. Joachim Sauer는 위에서 언급 한 것처럼 일반적인 문제에 대한 일반적인 해결책입니다.


2
디자인 패턴을 사용하는 IMO는 확장 성과 관련이 없습니다. 코드에서 일반적인 패턴을 인식하여 그에 대해 이야기 할 수있는 것은 어휘입니다. 종종 응용 프로그램을 확장하면 성능에 유리한 우수한 디자인을 사용하는 것을 의미 할 수 있습니다.
Adrian Schneider
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.