language agnostic - 적용 - 디자인 패턴을 사용합니까?




디자인패턴 책 (10)

현실 세계에서 디자인 패턴의 침투는 무엇입니까? 하루 종일 일하는 데 사용합니까 - 직장 동료와 어떻게 적용 할 것인가와 장소를 논의하는 것 - 또는 그들이 학문적 개념을 더 유지합니까?

그들은 실제로 당신의 직업에 실제 가치를 제공합니까? 아니면 사람들이 똑똑하게 말하기 만하면되는 것입니까?

참고 :이 질문의 목적을 위해 Singleton 과 같은 '단순한'디자인 ​​패턴은 무시하십시오. Model View Controller 등을 활용할 수 있도록 코드를 설계하는 방법에 대해 설명합니다.


"현실 세계"에서 사용되는 단순한 것 이상의 많은 디자인 패턴이 있습니다. 좋은 예 는 Model View Controller Pattern을 사용합니다. 필자는 고용주를 위해 프로젝트에서 클래스 팩토리를 여러 번 사용했으며 이미 사용 된 많은 프로젝트를 보았습니다.

나는 모든 디자인 패턴이 사용되고 있지만 많은 것들이 사용되고 있다고 말하는 것이 아닙니다.


MVC 패턴이 모델 논리를 분리하는 데 정말 유용하다는 것을 알았습니다.이 논리는 너무 많은 문제없이 재사용하거나 작업 할 수 있습니다. 또한 클래스를 분리하고 단위 테스트를 더 쉽게 수행 할 수 있습니다. 나는 최근 에 그것에 대해 썼다 (예, 여기에 뻔뻔한 플러그가 ...)

또한 최근에 기본 클래스의 팩토리 패턴을 사용하여 LINQ를 사용하여 필요한 DataContext 클래스를 생성하고 반환했습니다.

교량은 서로 다른 두 가지 기술 (예 : Mac의 경우 Cocoa 및 Ruby) 을 함께 결합하려고 할 때 사용됩니다.

그러나 나는 패턴을 구현할 때마다 그 패턴을 알고 있기 때문에 그 패턴을 발견합니다. 내 필요를 수용하기 위해 원래 패턴을 약간 수정해야한다는 것을 알게되면서 약간의 추가 생각이 일반적으로 들어갑니다.

우주 비행사 가되지 않도록 조심해야합니다!


나는 그렇게하려고한다. 그들은 실제로 코드의 유지 보수성과 가독성을 돕습니다. 그러나, 존재하지 않는 패턴으로 시스템을 강요함으로써 일반적으로 (내가 본 것에서) 그들을 남용하는 사람들이 있습니다.


나는 절대적으로 디자인 패턴을 사용한다. 이 시점에서 필자는 MVC를 디자인 패턴으로 생각합니다. 그 (것)들을 사용하기를위한 나의 주된 이유는 나가 아마 특정한 문제를 만날 첫번째 사람 아닙니다다는 것을 알게 충분히 겸허하다이다. 나는 어떤 패턴을 사용할지 알지 못하는 코드 조각을 거의 시작하지 않는다. 코드가 자연스럽게 기존 패턴으로 발전 하는지를 지속적으로 확인합니다.

필자는 마틴 파울러 (Martin Fowler)의 엔터프라이즈 애플리케이션 아키텍처 패턴 (Architecture of Enterprise Application Architecture)에 대해서도 매우 좋아합니다. 문제 나 과제가 그 자체를 제시 할 때, 나는 관련 섹션 (주로 참고 도서 임)으로 넘어가 패턴에 대한 몇 가지 개요를 읽는다. 일단 일반적인 문제와 기존 솔루션에 대해 더 잘 이해하면, 필자는 코드가 다른 사람들의 경험을 통해 취할 수있는 장기적인 길을보기 시작합니다. 나는 훨씬 더 나은 결정을 내린다.

디자인 패턴은 분명히 "미래를위한"모든 아이디어에서 큰 역할을합니다.


네, 잘 알려진 디자인 패턴을 많이 사용하지만, 결국에는 나중에 '명명 된'디자인 패턴을 사용하는 일부 소프트웨어를 구축하게됩니다. 가장 우아하고 재사용 가능한 디자인은 '패턴'이라고 할 수 있습니다. 춤 동작과 아주 흡사합니다. 우리 모두는 왈츠와 2 단계를 알고 있지만, 대부분의 사람들이 '범프와 스커트'라는 이름을 가지고있는 것은 아닙니다.


예, 공장, 책임 사슬, 명령, 프록시, 방문자 및 옵저버 등이 매일 작업하는 코드베이스에서 사용됩니다. MVC가가는 한,이 사이트는 그것을 아주 잘 사용하는 것으로 보이며, 개발자는 최신 Podcast 에서 충분한 좋은 것을 말할 수 없습니다.


패턴이 적용 가능하다면 패턴을 사용하려고합니다. 나는 개발자가 단지 그것을 위해 코드에서 디자인 패턴을 구현하는 것을보고 슬프다 고 생각한다. 그러나 올바른 작업을 위해서는 디자인 패턴이 매우 유용하고 강력 할 수 있습니다.


잘 작성된 큰 프로그램은 디자인 패턴을 사용합니다 (이름이 지정되지 않거나 인식되지 않는 경우에도). 그것이 바로 디자인 패턴입니다. 반복적으로 그리고 자연스럽게 발생하는 디자인입니다. 못생긴 API를 사용한다면 Facade 를 구현하여 스스로 정리할 수 있습니다. 분리해야 할 구성 요소간에 메시징이있는 경우 Observer 사용하여 자신을 찾을 수 있습니다. 상호 교환 가능한 알고리즘이 여러 개 있다면 Strategy 끝낼 수 있습니다.

디자인 패턴을 인식 할 가능성이 높기 때문에 디자인 패턴을 파악한 다음 더 빨리 깨끗한 솔루션에 수렴 할 수 있기 때문에 가치가 있습니다. 그러나, 비록 당신이 그것들을 전혀 모르는 것이라 할지라도, 당신은 궁극적으로 그것들을 생성하게 될 것입니다 (당신이 괜찮은 프로그래머라면).

물론 현대 언어를 사용하는 경우 표준 라이브러리에 구워져 있기 때문에 일부 언어로 사용하는 것이 좋습니다.


예, 디자인 패턴 또는 추상적 패턴은 내 삶의 일부입니다. 내가 보는 곳에서 볼 수 있습니다. 그러므로 나는 그들에게 둘러싸여있다. 그러나 아시다시피, 거의 지식은 위험한 것이 아닙니다. 따라서 GoF 서적을 꼭 읽어 보시기 바랍니다.

디자인 패턴에 대한 주요 문제점 중 하나는 대부분의 개발자가 아이디어를 얻지 못하거나 믿지 않는다는 것입니다. 그리고 대부분의 경우 변수, 루프 또는 스위치에 대해 논쟁합니다. 그러나, 나는 당신이 패턴 언어를 말하지 않으면, 당신의 소프트웨어가 멀지 않을 것이고 당신은 유지 보수의 악몽에 빠지게 될 것이라고 강력하게 믿습니다.

아시다시피, 안티 패턴은 또한 위험한 일이며 디자인 패턴에 대한 전문 지식이 거의없는 경우 발생합니다. 리팩터링 방지 패턴은 훨씬 더 어렵습니다. 이 문제에 대한 권장 도서로 "AntiPatterns : 리펙토링 소프트웨어, 아키텍처 및 프로젝트 위기"를 읽어보십시오.


예. 적절하게 사용할 경우 디자인 패턴이 훌륭합니다. 언급했듯이, 저는 현재 모든 웹 프로젝트에 MVC (Model-View-Controller)를 사용하고 있습니다. 웹 공간에서 매우 일반적인 패턴으로 서버 쪽 코드를 훨씬 깔끔하고 잘 정리합니다.

그 외에도 다음과 같은 유용한 패턴이 있습니다.

  • MVVM (Model-View-ViewModel) : MVC와 비슷한 패턴. WPF 및 Silverlight 응용 프로그램에 사용됩니다.

  • 작문 : 당신이 객체의 계층 구조를 사용해야 할 때 좋습니다.

  • 싱글 톤 : 진정으로 단일 인스턴스가 필요한 항목을 저장하기 위해 전역을 사용하는 것보다 더 우아합니다. 언급했듯이 간단한 패턴이지만 용도가 있습니다.

디자인 패턴은 또한 언어의 부족이나 언어의 부족을 강조 할 수 있습니다. 예를 들어, 이터레이터는 이제 더 새로운 언어의 일부로 구축됩니다.

일반적으로 디자인 패턴은 매우 유용하지만 어디에서나 사용하면 안됩니다. 그들이 당신의 필요에 잘 어울리는 곳에.







design-patterns