문제

나는 패턴과 패턴 방지를 연구하고 있습니다. 나는 패턴에 대한 명확한 아이디어가 있지만, 반포를 얻지 못한다. 웹과 Wikipedia의 정의는 저를 많이 혼동합니다.

아무도 나에게 간단한 말로 반 패턴이 무엇인지 설명 할 수 있습니까? 목적은 무엇입니까? 걔들 뭐해? 나쁜 일입니까, 좋은 일입니까?

도움이 되었습니까?

해결책

패턴 방지 나쁜 프로그래밍 관행으로 간주되는 소프트웨어 개발의 특정 패턴입니다.

반대로 디자인 패턴 공식화 된 일반적인 문제에 대한 일반적인 접근 방식은 일반적으로 좋은 개발 관행으로 간주되며, 반포 방지는 반대이며 바람직하지 않습니다.

예를 들어, 객체 지향 프로그래밍에서 아이디어는 소프트웨어를 객체라는 작은 조각으로 분리하는 것입니다. 객체 지향 프로그래밍의 패턴 방지는 a 신의 대상 이것은 다른 객체로 더 잘 분리 될 많은 함수를 수행합니다.

예를 들어:

class GodObject {
    function PerformInitialization() {}
    function ReadFromFile() {}
    function WriteToFile() {}
    function DisplayToScreen() {}
    function PerformCalculation() {}
    function ValidateInput() {}
    // and so on... //
}

위의 예에는 객체가 있습니다 모든 것. 객체 지향 프로그래밍에서, 코드를 덜 결합하고 궁극적으로 더 관리하기 쉽게 유지하기 위해 다른 객체에 대해 잘 정의 된 책임을지는 것이 바람직합니다.

class FileInputOutput {
    function ReadFromFile() {}
    function WriteToFile() {}
}

class UserInputOutput {
    function DisplayToScreen() {}
    function ValidateInput() {}
}

class Logic {
    function PerformInitialization() {}
    function PerformCalculation() {}
}

결론은 일반적으로 사용되는 패턴을 가진 소프트웨어를 개발하는 좋은 방법이 있다는 것입니다.디자인 패턴), 그러나 소프트웨어가 개발되고 구현되는 방법도 있습니다. 나쁜 소프트웨어 개발 관행으로 간주되는 패턴은 방지 방지입니다.

다른 팁

반포에 대해들을 때마다, 나는 또 다른 용어를 기억합니다. 디자인 냄새.

"디자인 냄새는 기본 설계 원칙 위반과 디자인 품질에 부정적인 영향을 미치는 디자인의 특정 구조입니다."( "소프트웨어 설계 냄새를위한 리팩토링 : 기술 부채 관리")

디자인 원칙 위반에 따라 분류 된 많은 디자인 냄새가 있습니다.

추상화 냄새

추상화 누락 : 이 냄새는 클래스 나 인터페이스를 만드는 대신 데이터 덩어리 또는 인코딩 된 문자열이 사용될 때 발생합니다.

명령 적 추상화 : 이 냄새는 수술이 수업으로 바뀔 때 발생합니다.

불완전한 추상화 : 이 냄새는 추상화가 상보 적 또는 상호 관련된 방법을 완전히 지원하지 않을 때 발생합니다.

다면적 추상화 : 이 냄새는 추상화에 둘 이상의 책임이 할당 될 때 발생합니다.

불필요한 추상화 : 이 냄새는 실제로 필요하지 않은 (따라서 피할 수있는) 추상화가 소프트웨어 설계에 도입 될 때 발생합니다.

활용되지 않은 추상화 : 이 냄새는 추상화가 사용되지 않은 상태로 남아있을 때 발생합니다 (직접 사용되지 않거나 도달 할 수 없음).

중복 추상화 : 이 냄새는 둘 이상의 추상화가 동일한 이름 또는 동일한 구현 또는 둘 다를 가질 때 발생합니다.

캡슐화 냄새

부족한 캡슐화 : 이 냄새는 추상화의 한 명 이상의 구성원의 선언 된 접근성이 실제로 필요한 것보다 더 허용 될 때 발생합니다.

누출 캡슐화 : 이 냄새는 공개 인터페이스를 통해 추상화가 "노출"또는 "누출"구현 세부 사항을 구현할 때 발생합니다.

누락 캡슐화 : 이 냄새는 구현 변동이 추상화 또는 계층 내에서 캡슐화되지 않을 때 발생합니다.

미개발 캡슐화 : 이 냄새는 클라이언트 코드가 계층 구조 내에서 이미 캡슐화 된 유형의 변동을 악용하는 대신 명시 적 유형 확인 (객체 유형을 확인하는 묶인 if-else 또는 객체 유형을 확인하는 스위치 명세서 사용)을 사용하는 경우가 발생합니다.

모듈화 냄새

깨진 모듈화 : 이 냄새는 단일 추상화로 이상적으로 국소화되어야하는 데이터 및/또는 방법이 여러 가지 추상화에 걸쳐 분리되어 퍼질 때 발생합니다.

불충분 한 모듈화 : 이 냄새는 완전히 분해되지 않은 추상화가 존재할 때 발생하며, 추가 분해는 크기, 구현 복잡성 또는 둘 다를 줄일 수 있습니다.

주기적으로 의존적 인 모듈화 : 이 냄새는 둘 이상의 추상화가 서로 직간접 적으로 의존 할 때 발생합니다 (추상화 사이에 단단한 결합을 생성).

허브와 같은 모듈화 : 이 냄새는 추상화가 많은 다른 추상화와 의존성 (들어오는 것과 나가는)을 가질 때 발생합니다.

계층 냄새가납니다

누락 계층 : 이 냄새는 코드 세그먼트가 조건부 논리 (일반적으로 "태그 유형"과 함께)를 사용하여 계층 구조를 생성하고 이러한 변형을 캡슐화하는 데 사용될 수있는 동작의 변화를 명시 적으로 관리 할 때 발생합니다.

불필요한 계층 : 이 냄새는 전체 상속 계층이 불필요 할 때 발생하며, 이는 특정 설계 컨텍스트에 상속이 불필요하게 적용되었음을 나타냅니다.

유능한 계층 : 이 냄새는 계층의 유형간에 불필요한 복제가있을 때 발생합니다.

넓은 계층 : 이 냄새는 상속 계층 구조가 "너무"넓을 때 발생하여 중간 유형이 누락 될 수 있음을 나타냅니다.

투기 계층 : 이 냄새는 계층 구조의 하나 이상의 유형이 투기 적으로 제공 될 때 발생합니다 (즉, 실제 요구 사항보다는 상상 된 요구에 근거하여).

깊은 계층 : 이 냄새는 상속 계층 구조가 "과도하게"깊이있을 때 발생합니다.

반항적 인 계층 : 이 냄새는 하위 유형이 슈퍼 유형에 의해 제공된 방법을 거부 할 때 발생합니다.

깨진 계층 : 이 냄새는 슈퍼 타입과 그 하위 유형이 개념적으로“IS-a”관계를 공유하지 않아 대체 성이 깨질 때 발생합니다.

다중 경로 계층 : 이 냄새는 하위 유형이 계층 구조에서 불필요한 상속 경로로 이어지는 슈퍼 유형에서 간접적으로 직접적으로 물려받을 때 발생합니다.

순환 계층 : 이 냄새는 계층 구조의 슈퍼 형이 하위 유형에 의존 할 때 발생합니다.


위의 정의와 분류는 다음과 같습니다 "소프트웨어 설계 냄새를위한 리팩토링 : 기술 부채 관리". 더 관련성이 높은 리소스를 찾을 수 있습니다 여기.

패턴은 일부 클래스의 문제를 해결하는 방법에 대한 아이디어입니다. 반란 방지는 그 아이디어를 구현하면 디자인이 좋지 않기 때문에 그것을 해결하지 않는 방법에 대한 아이디어입니다.

예를 들어 "패턴"은 코드 재사용 기능을 사용하는 것입니다. "반포 방지"는 동일하게 Copy-Paste를 사용하는 것입니다. 둘 다 동일한 문제를 해결하지만 함수를 사용하면 일반적으로 Copy-Paste보다 더 읽기 쉽고 관리 가능한 코드로 이어집니다.

패턴 방지는 문제를 해결하지 않는 방법입니다. 그러나 그것에 더 많은 것이 있습니다 : 그것은 또한 문제를 해결하려는 시도에서 자주 볼 수있는 방법이기도합니다.

안티 패턴을 공부하고 싶다면 책을 얻으십시오. 반포 란 (ISBN-13 : 978-0471197133).

그것에서, 그들은 "반포 란드는 결정적으로 부정적인 결과를 초래하는 문제에 대한 일반적으로 발생하는 해결책을 설명하는 문학적 형태"라고 정의합니다.

따라서 잘못된 프로그래밍 관행이지만 공통적 인 방법이 아니라면 하나의 응용 프로그램, 한 회사 또는 하나의 프로그래머에 제한이없는 경우, 반포 란 정의의 "패턴"부분을 충족시키지 못합니다.

엉망인 일반적인 방법. 예를 들어 God/Kitchensink 클래스처럼 (예를 들어 모든 것을 수행합니다).

an 패턴 방지 a의 보완입니다 디자인 패턴. 방지 방지는 특정 상황에서 사용해서는 안되는 템플릿 솔루션입니다.

a와 마찬가지로 디자인 패턴, an 패턴 방지 또한 템플릿이자 특정 문제를 해결하는 반복적 인 방법이지만 최적이지 않고 비효율적 인 방식입니다.

흥미롭게도 문제를 해결하는 주어진 방법은 패턴이자 반란제가 될 수 있습니다. 싱글 톤이 이것의 대표적인 예입니다. 그것은 두 문학 세트에 나타날 것입니다.

오늘날 소프트웨어 엔지니어링 연구원과 실무자들은 종종“반포 팬”과“냄새”라는 용어를 상호 교환 적으로 사용합니다. 그러나 그들은 개념적으로 동일하지 않습니다. 반포 패턴의 위키 백과 진입은 반 패턴이 나쁜 관행이나 나쁜 아이디어와 적어도 두 가지 요인과 다르다고 명시하고 있습니다. 반포 팬은입니다

"처음에는 문제에 대한 적절하고 효과적인 반응 인 것처럼 보이지만 일반적으로 사용되는 프로세스, 구조 또는 행동 패턴은 일반적으로 유익한 결과보다 더 나쁜 결과를 초래합니다."

그것은 제시된 문제에 대한 좋은 해결책 (패턴으로)이라는 믿음으로 반포 스턴이 선택되었음을 분명히 나타낸다. 그러나 혜택보다 더 많은 부채를 가져옵니다. 반면에, 냄새는 단순히 소프트웨어 시스템의 품질에 부정적인 영향을 미치는 나쁜 관행입니다. 예를 들어, 싱글 톤은 반란 방지이며 신의 클래스 (또는 불충분 한 모듈화)는 디자인 냄새입니다.

반란 방지는 사람들이 잘못된 방식으로 프로그래밍하는 경향이 있거나 적어도 그렇게 좋지 않은 방법입니다.

주어진 소프트웨어 개발 환경에 유익한 것보다 더 해를 끼치는 디자인 패턴은 반포 방지로 간주됩니다.

일부 반란제는 분명하지만 일부는 그렇지 않습니다. 예를 들어, 싱글 톤은 많은 사람들이 오래된 디자인 패턴을 고려하지만 그렇지 않은 다른 사람들이 있습니다.

질문을 확인할 수 있습니다 싱글 톤의 나쁜 점은 무엇입니까? 그것에 대한 다른 의견을 더 잘 이해하기 위해.

알고리즘과 마찬가지로 Brute Force를 사용하여 솔루션을 달성 할 수 있지만 상황이 복잡해지면 많은 비용을 지불해야합니다.

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