PHP 디자인 패턴 제로 시리즈 '한 눈에 알 수 있다'

WBOY
풀어 주다: 2016-07-29 08:55:35
원래의
973명이 탐색했습니다.

친절한 링크:
1. 일련의 PHP 디자인 패턴을 한눈에 이해하기 (1)
2. 한눈에 알 수 있는 PHP 디자인 패턴 시리즈 (2)

머리말

이 글은 제가 세 가지 디자인 패턴을 다 작성한 후에 쓴 글입니다. 디자인 패턴의 원리에 대해 좀 더 자세히 설명하자면, 디자인 패턴이든 누구나 흔히 쓰는 코드이든 무심코 사용하고 따라하게 될 것입니다.

당신이 모르는 디자인 패턴 원칙

단일 책임 원칙

정의

하나 이상 갖지 마세요 클래스 변경 사유가 발생합니다. 평신도의 관점에서 보면 클래스는 단 하나의 책임만 담당합니다.

언어에 대한 이해

일을 분담하고 최대한 협력할 수 있는 사람 각자가 자기 작품에 책임을 지며 상호 영향을 받지 않도록 잘한다.

리스코프 대체 원칙

정의

기본 클래스를 참조하는 모든 장소는 해당 하위 클래스의 개체를 투명하게 사용할 수 있어야 합니다. 하위 클래스는 상위 클래스의 기능을 확장할 수 있지만 상위 클래스의 원래 기능을 변경할 수는 없습니다.

언어적 이해

전임자가 작성한 클래스를 상속할 때 다음을 시도해 보세요. 내부 메소드를 덮어쓰거나 오버로드하지 마십시오. 어디에 영향을 받을지 모르기 때문입니다. 상속 방법은 또한 원래 논리를 존중하고 쉽게 변경하지 않으려고 노력합니다.

종속성 역전 원칙

정의

상위 수준 모듈은 하위 수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 합니다. 세부 사항에 의존하지 않아야 합니다. 세부 사항은 추상화에 의존해야 합니다.

언어적 이해

상위 모듈은 하위 모듈에 의존하지 않습니다. 높은 위험을 피하기 위해 제3자(추상 클래스)에 의존하는 것이 가장 좋습니다. 제품 변경 전략은 수평 확장(추상 클래스를 상속하는 또 다른 하위 클래스)을 통해 쉽게 해결할 수도 있습니다. 상속 시에는 Liskov 대체 원칙

인터페이스 격리 원칙

을 따르세요. 정의

클라이언트는 필요하지 않은 인터페이스에 의존해서는 안 됩니다. 한 클래스가 다른 클래스에 종속되는 것은 가장 작은 인터페이스를 기반으로 해야 합니다.

언어적 이해

인터페이스를 통해 프로그래밍하는 경우 인터페이스 클래스에 추상 메서드를 잔뜩 넣지 마세요. 이렇게 하면 상속된 클래스가 다음을 수행해야 합니다. 전혀 속하지 않는 메소드를 구현하려면 인터페이스라 할지라도 총점 개념에 따라 개요를 작성해 보세요. 공통적인 것은 인터페이스 클래스에 작성하고, 개별적으로 맞춤화된 것은 별도로 작성해야 하며, 하위 클래스는 인터페이스 클래스를 선택적으로 상속할 수 있습니다.

데메테르의 법칙

정의

객체는 다른 객체에 대한 최소한의 지식을 유지해야 합니다.

언어적 이해

너무 많이 알면 죽을 확률이 높다는 게 전형적인 사실이다. 모듈을 작성할 때 모듈이 많을수록 결합력이 커지고 실수하기 쉽습니다.

개방-폐쇄 원칙

정의

클래스, 모듈, 함수 등 소프트웨어 개체는 확장에는 개방되고 수정에는 폐쇄되어야 합니다.

언어적 이해

제품 요구사항이 변경되면 기존 코드를 수정하는 대신 소프트웨어 엔터티의 동작을 확장(클래스 추가, 메소드 추가)하여 변경을 달성하도록 노력하십시오. 변경 사항을 구현합니다.

문제에 대한 토론

<code>很多优化的地方都在说:高内聚低耦合,那么问题来了,高内聚低耦合真的好吗?</code>
로그인 후 복사

내 의견은 비즈니스의 구체적인 논리를 살펴보는 것입니다. 왜냐하면 응집력이 높고 결합도가 낮기 때문에 특정 비즈니스 부분이 상호 연관되고 복잡하기 때문입니다. 결과적으로 독립적인 코드 블록이 많이 존재하므로 주석이 있어도 코드는 사람들에게 점프하는 느낌을 주어 가독성을 떨어뜨리고, 이는 코드 유지 관리의 감소로 직접 이어집니다. 다른 사람에게 넘겨지면 미래 세대가 어려움을 겪을 것입니다. 코드를 이해하는 데 많은 시간이 걸리고 앞으로 나아가기가 어렵습니다. 특정 의존성에 따른 적절한 커플링 코드와 청킹이 더 좋다고 들었어요~
좋은 디자인 패턴은 처음부터 디자인하는 것이 아니라 단계적으로 수정하는 것입니다.

메시지를 남기고 공유해 주셔서 감사합니다

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

위 내용을 포함해 한눈에 이해할 수 있는 PHP 디자인 패턴 제로를 시리즈로 소개하고 있는데, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿