문제

디자인 패턴이 언제 소프트웨어를 악화시킬 수 있습니까?

나는 그들이 GUI와 논리 사이의 외관 패턴을 사용한 프로그램을 보았습니다. 그들은이를 통해 객체가 전송 될 수 없다고 생각했기 때문에 원시 유형 만 사용되어 코딩하기가 어려웠습니다.

도움이 되었습니까?

해결책

수십 년 동안 프로그래머는 종종 소프트웨어를 만드는 데 시간을 보냈습니다 더 나쁜 ~에 의해 그 연습이 왜 좋은지 배우기보다는 이해하지 못하는 관행을 적용합니다. 특정 도구/키워드/프레임 워크를 사용하면 프로그래머가 일을 망칠 때 정교하게 느낄 수 있습니다. 몇 가지 일반적인 예 :

  • 많은 시도/캐치/마침내 블록을 던지면 프로그래머가 실제로 그렇지 않은 경우 오류 처리 체계가있는 것처럼 느낄 수 있습니다.
  • SQL을 저장 프로 시저로 교체하면 프로그래머가 실제로 그렇지 않은 경우 효율성, 재사용 가능성, 캡슐화를 마술처럼 제공하는 데이터 액세스 계층이있는 것처럼 느낄 수 있습니다.
  • 클래스를 사용하면 많은 프로그래머가 실제로 객체 지향 프로그래밍에 참여하고 있다고 생각합니다.

이 목록은 영원히 계속 될 수 있습니다. 이 경향은 항상 주변에 있었고 항상있을 것입니다. 왜냐하면 우리 인간은 항상 지름길을 찾기 때문입니다. 우리는 이것을 많이 본다 패턴 이제 패턴이 현재 인기가 있기 때문입니다. 근본 문제는 동일합니다. 개발자는 소프트웨어 개발이 얼마나 복잡한 지 존중하지 않는 개발자이며 맹목적으로 구현 된 패턴이나 실습을 생각하는 것은 학습과 겸손을 대신합니다.

해결책? 말하기 어렵습니다. 주니어 개발자를 건네더라도 잘못 갈 수 없습니다. 코드 완료 또는 어떤 사람들은 이것이 원칙을 적용하는 것입니다. 특정 상황, 그리고 그 훌륭한 개발자들은 그것을 간단하게 유지합니다.

다른 팁

당신이 그것을 오용 할 때, 또는 때로는 패턴을 불필요하게 사용할 때 때로는 더 나쁘다. 후자는 코드 조각을 분석 할 때 자연스럽게 모든 것에 대한 이유가 있다고 가정하고 무언가에 대한 이유를 볼 수 없을 때 가장 안전한 기본 가정은 내가 무언가를 놓치고 있다는 것입니다. 그리고 나는 알 수 없거나 예측할 수없는 방식으로 코드를 위반하는 위험을 감수하고 싶지 않기 때문에, 나는 그것을 엉망으로 만들기 전에 왜 거기에 있는지 알아 내려고 시간을 낭비합니다.

설계 패턴은 단순히 공통 코드 구조를 명명하고 문서화하는 방법입니다. 따라서 모든 패턴이 좋은 패턴이라고 결론을 내리지 말아야합니다. 디자인 패턴 (예 : GOF)을 문서화하는 데 좋은 작업을 수행하는 사람들은 항상 패턴을 사용해야하는시기를 설명하는 패턴 설명에 섹션을 포함합니다. 대부분의 디자인 패턴 책의 절반의 절반은 "디자인 패턴이 언제 소프트웨어를 악화시킬 수 있습니까?"라는 질문에 대답하는 것입니다.

경험이없는 많은 개발자들은 적절한 용도 섹션을 배우고 부적절한 패턴을 적용하지 않습니다. 나는 이것이 디자인 패턴을 둘러싼 많은 부정성의 원인이라고 생각합니다.

결론적 으로이 질문에 대한 답은 실제로 다음과 같아야합니다 .- 디자인 패턴을 읽으면 알려줄 것입니다.

디자인 패턴은 소프트웨어를 오용하면 소프트웨어를 악화시킬 수 있습니다. 잘못된 상황에서 적용합니다. 상식은 디자인 패턴의 완벽한 동반자 여야합니다.

패턴의 오용은 때때로 a와 관련이 있습니다 힘에 대한 이해 부족 문제와 관련된 패턴과 관련하여 해당 문제에 대한 솔루션이 제안되었습니다. 또한 패턴의 의도는 오해를 유발할 수 있습니다.

패턴을 더 잘 이해하려면 에 대해 알아보십시오 안티 패턴 개념 GOF 책보다 훨씬 더 많이 읽으십시오. 한 가지 제안은 읽는 것입니다 패턴 부화 GOF의 개념을 보완합니다.

작년 한 해 동안 디자인 패턴에 대한 폭발이 커지는 것처럼 보이는 디자인 패턴과 구현에 상당한 시간을 투자 한 것은 흥미 롭습니다. 디자인 패턴은 상당히 여부에 관계없이 소프트웨어를 정량화 가능한 기술로 만들어야하는 프로세스와 방법론에 합류했습니다. 즉,이를 사용하는 오류는 더 나은 코드를 작성할 수 있습니다. 디자인 패턴의 문제는 숙련 된 프로그래머가이를 "골든 해머"로 사용한다는 것입니다. 그들은 전략 패턴을 배웁니다 - 그것은 귀중한 것입니다 - 그러나 그들은 그것을 사용합니다. 어디에나, 코드를 과도하게 복잡하게하고 불필요한 기능과 "확장 가능성"을 추가합니다.

나는 엄청난 가치가 있다고 생각합니다 리팩토링 기존 코드를 정리하기 때문에 패턴에. 패턴은 또한 귀중한 통신 도구이므로 코드를 더 높은 수준의 용어로 설명 할 수 있습니다. 그러나 시원하고 시장성이 높기 때문에 디자인 패턴을 소프트웨어에 스터핑하는 것은 나쁜 생각입니다.

쉬운 이유 (EJB)

문제가 잘못된 패턴 일 때.

일반적으로 코더가 패턴이 레고와 같은 벽돌이라는 태도를 취하면 소프트웨어를 구축하는 레고와 같은 벽돌이라면 정말 이상한 코드를 얻을 수 있습니다.

코딩 문제를 해결하는 데 도움이되는 파란색 프린트 대신에 디자인 패턴을 절대 빌딩 블록으로 사용하면 소프트웨어가 악화됩니다.

그들은 문제가 짜여진 블록이 아니 었습니다. 그들은 대상 명명 규칙에 나타나서는 안됩니다. 객체를 *공장 또는 *싱글 톤 또는 기타 패턴 이름이라고 부르지 않아야합니다. 특정 패턴에 고정되어서는 안됩니다.

그들은 단지 복잡한 코드를보다 빠르게 구축하는 데 도움이되는 "시작점"이 정말 좋습니다. 필요에 따라 아이디어를 혼합하고 일치시킬 수 있습니다. 선적 서류 비치? 그것이 객체 네임 스페이스가 아니라 댓글이있는 것입니다 ...

폴.

이를 방지라고 불리며, antipatterns : Refactoring Software, Architectures 및 Crisis Book의 프로젝트를 참조하십시오.

반포에 대해 읽을 수 있습니다 여기, 예를 들어.

제 생각에는 전략 패턴 필요하지 않으면 소프트웨어를 악화시킬 수 있습니다. 전략 패턴은 기본적으로 기능을 "플러그 가능"으로 만듭니다. 즉, 우리는 다른 구현을 즉시 전환 할 수 있습니다. 그러나이 플러그 가능한 기능은 종종 구성과 함께 많은 복잡성 (그리고 때로는 여분의 오버 헤드)을 추가하며 필요하지 않은 경우 폐기물입니다. 나는이 패턴이 매우 자주 남용되는 것을 본다.

Levi, 나는 그것이 내 인생 (그리고 코드를 유지하는 책임있는 사람)을 더 쉽게 만들어주는 경우에만 특정 패턴 만 사용합니다. 적절한 디자인 패턴 선택이 의견만큼 중요하다고 생각합니다. 댓글이 더 중요할까요? 대부분의 경우 개발자로서 우리가 수년간 사용해 온 기술을 공식적으로 설명 할 수 있습니다.

Theeruditetroglodyte

잘못 이해되거나 잘못 적용되는 패턴은 코드가 더 나쁘지 않은 경향이 있습니다. 또한, 패턴을 위해서만 적용되는 패턴, 예를 들어 "우리는 지금 SOA!" 일반적으로 패턴이 ""을 소개하는 경우코드 흡연"그러면 그 사용은 의심해야합니다.

하나의 문제를 해결하는 데 기반한 패턴을 선택할 때마다 소프트웨어가 해결하려는 모든 문제는 아닙니다.

반대로, 가능한 모든 최종 사용 사례에 맞는 솔루션을 과도하게 엔지니어링하려고하면 대부분의 사용 사례에 맞게 너무 부피가 큰 설계 패턴을 사용할 수 있습니다.

따라서 그 패턴을 준수하는 이상적인 패턴/수준은 두 극단 사이에 떨어질 것입니다.

디자인 패턴이 잘못 될 수있는 많은 방법을 생각할 수 있습니다. GOF 책은 모든 패턴에 대한 문제, 솔루션 및 단점을 설명합니다. - 패턴은 문제에 대한 해결책입니다. 그 문제가 당신의 문제가 아니라면, 아마도 그것은 아마도 반포 스가 될 것입니다. - 패턴에는 단점이 있으며, 그것들을 알고 있어야합니다. - 필요하지 않을 때. 패턴은 많은 수업을 암시 할 수 있으며, 미래에 가질 수 있지만 아직없는 문제를 해결하려고합니다. - 어떻게 작동하는지 이해하지 못하고 잘못 구현되면 반포 란도됩니다. 당신은 많은 쓸모없는 수업과 코드로 끝날 것입니다. - 당신이 그것에 중독되기 시작하면. 너무 깊고 다리 도피리즘이나 싱글 톤 등을 사용하는 계층은 문제를 일으킬 수 있습니다.

아마도 다른 이유도있을 것입니다 ...

사람들이 코드를 분석하고 비즈니스 로직보다 패턴을 이해하려고 더 많은 시간을 할애 할 때. 패턴은 좋지만 관련된 모든 사람이 읽는 방법을 알고있는 경우에만 가능합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top