가장 자주 사용되는 디자인 패턴은 무엇입니까? [닫은]


24

어떤 디자인 패턴이 가장 인기 있다고 생각하십니까?


둘 다 가능하다면 ...
Tamara Wijsman

"다형성 대신 스위치"?
mlvljr

@Bigown : 그런 다음 가장 좋아하는 답변을 "수락"해야합니다. 답변이 마음에 들지 않으면 현상금을 제공하십시오.
Macneil

2
건설적이지 않은 것으로 마감하기로 투표-이것은 기본적으로 설문 조사입니다. 어떤 사람이 인용 할 경험적 연구가 없다면 대답은 모두 추측 또는 즐겨 찾기 (또는 비 즐겨 찾기)가 될 것이며 투표는 개인적인 감정을 반영 할 것입니다. 최종 결과는 깊이가없는 디자인 패턴 목록입니다. 따라서 건설적이지 않습니다.
Steven A. Lowe

@Steven : Jay가 The Big Ball of Mud와 옳다고 확신합니다. :-)
Tamara Wijsman

답변:


39

나는 가장 흔한 것이 '진흙의 큰 공'이라고 확신합니다. 불행히도 우리 모두에게.
http://en.wikipedia.org/wiki/Big_ball_of_mud


새로운 프로젝트를 시작할 때 모든 것이 잘 짜여져 있고 문서화되어 있지만 마감일이 다가옴에 따라 모든 것이 커다란 진흙 공처럼 끝납니다.
Arturo Molina

3
@Arturo-가능한 이유 중 하나입니다. 기타 : 1) 소규모 프로젝트는 경험이 부족한 프로그래머가 시작하여 예상치 못한 성공을 거둔 후 원래 목적을 넘어 성장합니다. 2) 경험이 부족한 프로그래머가 유지 보수에 배정되는 경향이 있습니다. 유지 보수 담당자는 원래 아키텍처에 대한 지침이나 이해가 없기 때문에 물건을 해킹하기 때문에 시스템 시대가 갈수록 악화됩니다. 3) 팀은 잘못된 기술 또는 익숙하지 않은 새로운 기술을 사용하여 새로운 프로젝트에서 잘 사용하지
Jay

1
LOL-더 많은 포인트를 추가 할 수 있다면 가능합니다. 훌륭하고 슬픈 관찰.
luis.espinal

25

MVC 와 그 변형은 확실히 최고의 디자인 패턴 중 하나입니다.


2
나는 OP의 질문이 다소 어리석은 것이라고 말하려고했습니다 (아직도 믿습니다). 그러나 귀하의 답변은 IMO와 거의 같습니다. 거의 일관되게 사용되는 하나의 패턴 (및 그 변형)이있는 경우이 패턴입니다. 좋은 답변 +1.
luis.espinal

21

Gang-of-Four 디자인 패턴 에 대해 이야기하고 있다면 Singleton 이라고 말해야 합니다. 마치 프로그래머가 디자인 패턴의 마법에 대해 듣고 첫 번째 패턴을 마친 후에 마치 거의 슬픈 일입니다.

건축 스타일 패턴 (즉, 여러 클래스 또는 레이어에 걸쳐있는 디자인 패턴) 에 대해 이야기하고 있다면 MVC 라고 말해야 합니다. 다른 몇 가지 인기있는 것은 저장소 패턴 및 서비스 로케이터 입니다.


2
많은 사람들이 싱글 톤을 반 패턴으로 생각할 때 더 슬프다!
RichardOD

1
@RichardOD, 안타깝게도 사람들이 그것을 고려하는 것이 슬프거나 안티 패턴 일 때 사람들이 그것을 사용하는 것이 슬프습니까?
Matt Olenik

내가 의미하는 바는 너무 인기가있어서 슬프다는 것입니다. 인터뷰를 좋아하는 것 같습니다. 지난번 인터뷰에서 Singleton을 어떻게 코딩 할 것인지에 대한 질문을 받았으며 Unity와 같은 IoC 컨테이너를 사용하여 처리하지 않겠다는 답변을 받았습니다.
RichardOD

@RichardOD-안티 패턴으로 간주되는 것은 싱글 톤이 아닙니다. 안티 패턴 인 것은 남용입니다. 실제로 싱글 톤을 요구 / 필요한 경우는 거의 없으며, 자원 세분성을 제어하는 ​​컨테이너가있는 환경에서는 필요하지 않습니다. 예를 들어, 현대 Java 코드베이스에서 싱글 톤을 볼 때, 이는 일반적으로 안티 패턴 사용을 위한 레드 플래그입니다 (싱글 톤 패턴 자체가
아님

@Jaco-나는 당신과 다른 걸릴 것입니다. 복합, 전략 및 템플릿 (및 여러 가지 환생)이 싱글 톤보다 훨씬 널리 퍼져 있다고 생각합니다. 특히 지난 10 년 동안 상속보다 구조적 구성에 중점을 두었 기 때문에 특히 그렇습니다.
luis.espinal


7

데코레이터

컴포지션을 통해 런타임에 객체에 기능을 추가합니다. 내 개인적인 마음에 드는 것.

편집 : 또한 공장 은 아마도 가장 일반적인 것 중 하나 일 것입니다.


5

정면

Twitter 또는 SO API와 같은 REST 인터페이스를 생각하십시오. 적어도 트위터의 경우 엄청나게 복잡 할 수있는 많은 백엔드 항목을 숨기고 있습니다.

@apklusk의 트윗은 어떤 db 테이블에 저장되어 있나요? 그리고 빠른 캐시가 있습니까? 그리고 @ shemnon은 독자의 기억력이 부족한 독자 수준이 낮습니까? 그것이 Facade의 마술입니다.


5

전략 패턴

의존성 주입을 사용한 적이 있다면 전략 패턴을 사용한 것입니다.


템플릿 및 합성 (및 여러 변형 및 조합) 외에 전략, 합의
luis.espinal

5

왜 아직 반복자를 언급 하지 않았습니까? 특히 복잡한 데이터 구조를 구성하는 모든 맵에서 가장 많이 사용하는 맵이 있습니다. 아니면 다시 구현 한 패턴에 대해 이야기하고 있습니까?


3

내 경험상 아무도 가장 많이 사용되는 패턴 중 하나 인 팩토리 패턴을 언급 한 사람이 아무도 없습니다. 첫 번째가 아니라면 아마도 싱글 톤이 먼저되어야 할 것입니다.


3

이전 답변과 함께 상속 된 프로젝트의 짐승으로부터 오늘 나는 새로운 것을 추가 할 것입니다.

복사 붙여 넣기

디버깅하는 동안 비슷한 이름의 함수 2 개를 호출하는 코드 조각이 발생했습니다.

if(x)
   Func1
else
   Func2

Func1과 Func2는 동일한 매개 변수를 가졌습니다. 나는 그들을 뽑아서 diffed했고 Func1 호출 Func3 및 Func2 호출 Func4를 제외하고는 100 % 동일합니다. 나는 그것들을 뽑아서 흩었다. 한 줄을 제외하고 100 % 동일합니다. 따라서 이전 프로그래머는 플래그 매개 변수를 추가하는 대신 정확히 1 개의 장소에서 사용되는 2 개의 개인 함수에 2 개의 50 줄 중첩 함수를 복사하여 붙여 넣기로 결정했습니다. 울고 싶다.


2

4 가지 Gang-of-Four 디자인 패턴에 대해 말하면, Observer 패턴을 사용하지 않는 프로그램은 생각할 수 없습니다. Jaco가 언급했듯이 Singleton도 많이 사용되지만 불행히도 망치가되었습니다 (모든 프로그래머가 완전히 필요하지 않더라도 사용합니다).


1
재밌지 만 싱글 톤을 사용할 필요는 없었습니다. 전역 상태를 유지할 수있는 곳이 필요한 경우 구성 파일에 넣고 일반 클래스를 사용하여 액세스하십시오.
Robert Harvey

물론, 그러한 경우에는 필요하지 않습니다. 실제로 어떤 작업을 수행하기 위해 하나의 객체가 동기식으로 스레드 안전해야하는 경우는 어떻습니까? Singleton은 정적 변수의 상태를 유지하기위한 것이 아니라 실제로해야 할 일이있는 실제 객체입니다.
Cristian

필자가 필요로하는 시간은 데이터베이스 연결뿐입니다. 즉,이 프로젝트에서 거의 모든 "서비스"(읽기 : 팩토리와 유사) 클래스는 PHP $_SESSION변수에 저장된 단일 항목 입니다.
Tarka


1

아직 "빌더"라고 말한 사람이 아무도 없습니다. 또는 "어댑터". 그들은 아마도 언급 된 다른 것들만큼 이국적이지는 않지만 항상 사용합니다. Factory와 Abstract Factory도 매우 일반적입니다 (그러나 이미 가져 왔습니다).




0

소프트웨어 디자인 수준에서는 복합, 전략 및 템플릿 (및 공장 확장)이 가장 널리 사용된다고 주장합니다. 지난 10여 년 동안 우리는 OO 디자인을 사용하여 시스템을 구축 할 때 상속보다 컴포지션을 선호합니다. 결과적으로 방금 언급 한 패턴의 조합이 다른 모든 IMO보다 훨씬 중요한 역할을합니다.

건축 적으로는 엔터프라이즈에서 MVC와 내장 된 측면의 상태 머신을 기반으로 한 패턴을 주장했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.