>백엔드 개발 >PHP 튜토리얼 >서평 : PHP의 실제 설계 패턴

서평 : PHP의 실제 설계 패턴

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌원래의
2025-02-19 09:33:09332검색

서평 : PHP의 실제 설계 패턴 PHP에서 Brandon Savage의 실용적인 디자인 패턴에 대한이 리뷰에는 책에 대한 내 의견과 인상과 자체 출판 측면이 포함됩니다. 나에게 리뷰 사본을 주신 Brandon에게 감사드립니다.

디자인 패턴은 일반적인 문제에 대한 일반적인 솔루션에 관한 것입니다.

… 그들은 청사진이 아닌 개념입니다. 완성 된 디자인이 아닌 아이디어.
… 그들은 다른 어려운 상황에 명확성을 더합니다.

- Brandon Savage, Php 의 실용적인 디자인 패턴
키 테이크 아웃
Brandon Savage의 "PHP의 실용적인 디자인 패턴"은 일반적인 문제에 대한 일반적인 솔루션에 중점을 둔 PHP의 설계 패턴을 이해하고 구현하는 포괄적 인 가이드를 제공합니다. 이 책은 광범위한 패턴을 다루며, 각각의 잠재적 코드 구현으로 설명되어 중간 수준 개발자에게 귀중한 리소스가됩니다. . 책의 내용이 칭찬되지만 리뷰는 몇 가지 단점을 나타냅니다. 여기에는 레지스트리 패턴과 같은 특정 패턴에 대한 설명이 부족하고 독자가 고급 개념 및 타사 콘텐츠에 익숙하다는 가정이 포함됩니다. 이 검토는 또한 MVC 응용 프로그램의 모델에 대한 책의 접근 방식과 도메인 모델 패턴에 대한 실제 예제가 부족하다는 비판을합니다. 검토는 책의 전문 지침 부족, 언어 오류 및 코드 샘플의 이상한 이상한 점에서 볼 수 있듯이 자체 출판의 과제를 강조합니다. 이러한 문제에도 불구 하고이 책은 디자인 패턴을 탐구하려는 중간 개발자에게 권장되지만 기본 개념을 먼저 마스터 해야하는 초보자에게는 권장됩니다.

컨텐츠 더 가벼운 입문 메모에서 시작하여, Brandon은 프레임 워크의 필요성을 설명하고, OOP가 수업에서 물건을 포장하는 것만 의미하지는 않으며 디자인 패턴이 배우기 어려운 이유에 대해 자세히 설명합니다. 그런 다음 약간의 원칙으로 가벼운 소개를 계속하고 더 고급 개념을위한 토대를 마련합니다. 그는 각 탄탄한 규칙이 왜 중요한지와 그것이 의미하는 바를 설명합니다. Solid가 잘 확립 된 소프트웨어 설계 원칙이라는 점을 감안할 때 책에서 설명 할 모든 패턴과 비교하는 것은 당연합니다. 또는 더 정확하게 말하면, 각 패턴이 견고한 원칙을 얼마나 잘 존중하는지 평가하는 동시에 개발자에게 의도 된 기능을 제공합니다.

Dreyfus 모델 용어에서 문제를 표현한다면, 그는이 책이 학습에 대한 그러한 접근 방식이 전적으로 불가능할 때 고급 초보자 실수에 적용하지 않고 초보자를 유능한 수준 개발자로 바꾸겠다고 주장합니다. 인간 지식 획득 프로세스가 어떻게 작동하는지가 아닙니다.


TOC에서 지나치게 분명하지 않을 수 있으므로이 책에서 설명 된 패턴은 다음과 같습니다.

(추상) 공장 패턴 싱글 톤 패턴 빌더 패턴 데코레이터 패턴

어댑터 패턴 브리지 패턴 외관 패턴 전략 패턴 중재자 패턴
    옵저버 패턴 책임 패턴의 체인 반복자 패턴 복합 패턴
  • MVC 패턴 도메인 모델 패턴
  • 활성 레코드 패턴
  • 전면 컨트롤러 패턴
  • 는 너무 많은 패턴을 덮고 (그리고 가장 잘 덮힌), 나는“ […]와 같은 문장을 예를 들어, 레지스트리 패턴 (이 책에서 다루지 않음)… 왜 안 돼? 레지스트리 패턴은 인기있는 패턴이며 요즘 정확히 권장되지 않더라도 설명하기가 매우 간단합니다. 패턴별로, 각각은 잘 설명되며, 대부분은 캐시와 함께 공장 패턴 예제와 함께 그립을 가지고 있지만 대부분은 잘 구현되는 코드 예제가 이어집니다.
  • 패턴은 다른 캐시 - APC 및 Memcache의 예에서 실현되며, 둘 다 공장을 통해 생성되며, 캐시 구성 요소가 필요한 서비스에 주입됩니다. 그것은 나에게 의미가 있지만, 경험이 적은 사람들이 왜 공장 단계가 실제로 필요한지 궁금해하는 것을 볼 수 있으며, 캐시 객체 자체를 주입 해야하는 생성자에 캐시 인터페이스 자체를 단순히 입력하지 않고 단순히 유형이 아닙니다. 그리고 공장이 아닙니다. 현재 예제는 공장 인터페이스와 캐시 인터페이스를 모두 특징으로하며 최소한 잉여처럼 보입니다. 이것은 중간 수준의 개발자 접근 방식으로 설명되지 않았으며, 그것이 일부 사람들에게 혼란 스러울 까봐 두려워합니다. 나는 또한 다리 패턴의 설명에 만족하지 않습니다. 표면에 긁힌 것처럼, 절대로 돌아 오지 않는 것처럼 보였습니다. . 반면에, 나는 매우 흥미로운 트리 예제에 대한 복합 패턴 설명과 그 데모를 절대적으로 좋아했습니다. 저자는 메뉴 구성, 계층 구조 표현 등에 환상적으로 적용되는 중첩 노드 레벨을 갖는 복합 트리를 구축합니다. - 그리고 나는 특히 데코레이터 패턴 설명에 감격했습니다. 그것은 매우 접근하기 쉬운 방식으로 이루어졌으며 훌륭하고 사용 가능한 예에서 이루어졌습니다. 이 패턴은 특히 제가 요청할 때 파란색으로 사람들에게 설명하는 데 어려움을 겪었지만이 책보다 아직 더 나은 고장을 찾지 못했습니다.
  • . 모델의 방치 이 책의 한 예에서 Brandon은 모델이 모든 비즈니스 논리 및 검증 코드를 포함하는 MVC 응용 프로그램의 가장 무거운 리프터라고 말합니다. 이것은 내가 받아들이기에는 너무 절대적인 진술입니다 - 내 머리 꼭대기에서 나는 이것이 사실이 아닌 예를 생각할 수 있습니다 : Laravel. Laravel 5가 나오고 양식 요청을 추가하면 모델이 더 가벼워 질 것입니다.

    부여 된 사람들은 모든 사람들이 모든 것을 모델에 넣는 경향이 있지만, 같은 양의 신 구전을 컨트롤러에 넣는 사람들도 있습니다. 저의 경험과 선호도는 프레임 워크 관련이있어서 매우 가볍어야합니다 (소규모 컨트롤러, 소규모 모델, 소규모 또는 조회 없음)이어야하며 모든 서비스 관련 (서비스, 플러그인, 라이브러리, 도우미)이 필요한만큼 지방이 될 수 있다고 말합니다. 프레임 워크간에 상호 운영 할 수있는 한. 그래도 개인적인 취향이라고 생각합니다. 그래도 또 다른 것이 나를 이상하게 강타했습니다

    서평 : PHP의 실제 설계 패턴 좋은 모델을 만드는 것은 개발자가 다루는 가장 복잡한 작업 중 하나입니다. Zend 프레임 워크 문서는 오랫동안 모델을 만드는 것이 응용 프로그램 개발 프로세스의 대부분이기 때문에 Zend_model 클래스가 없다고 주장했습니다. zend_model을 만들려면 모든 사람이 동일한 모델 구조를 사용하거나 사용하고 싶다고 가정하는 것이며,이 장에서 코드를 포함하지 않은 것과 같은 이유로 불가능합니다.

    이것이 의미가 있지만 가장 간단한 매너에서 값, 게이트웨이 및 스토리지 객체를 보여주는 것은 처음으로 도메인 모델 패턴에 도입 된 사람들에게 엄청나게 유익했을 것입니다. 도메인 모델 패턴은이 책에서 너무 소홀히하고 이론적이었습니다.

    지식의 저주 이 책 전체에서 브랜든은 독자가 모든 것에 익숙하다고 가정 할 때 링크 된 개념 (ORM, 상속, 의존성 주입) 및 타사 콘텐츠 (갱 오브 네)를 언급합니다. 특히 4 가지 갱단은 여러 차례에 언급되었으며 최소한 디자인 패턴과의 링크를 사용할 수 있습니다. 그렇지 않으면 "초보자"와 "고급 초보자"독자는 혼란에 빠진 문장을 한눈에 볼 것입니다. 다른 경우, 단락 구조는 초보자에게 중급 사용자에 대한 이해 수준을 훨씬 뛰어 넘는 방식으로 작성됩니다.

    그것은 오래된 질문입니다. 많은 개발자들이 항상 어려움을 겪고 있습니다. 의존성을 반전시키고 수업 내에서 물체를 만들지 않기 위해 노력하고 있다면, 런타임 동안 필요한 종속성을 어떻게 만들 수 있습니까? 't는 반드시 주사되었다?

    이것은 패턴에 익숙해지기 위해이 책이 필요한 독자가 소모 할 수있는 수준이 아닙니다. 이 문장을 완전히 이해하는 독자는 이미 책의 모든 패턴에 완전히 익숙 할 것입니다. 따라서 실제 대상 청중에게 의문을 제기합니다. 나는 이것이“지식의 저주”로 알려진 Savage 씨 때문이라고 생각합니다.

    Wikipedia는 다음과 같이 정의합니다 서평 : PHP의 실제 설계 패턴

    지식의 저주는 정보가 적은 당사자들의 관점에서 문제에 대해 생각하기가 매우 어렵다는 정보를 제공하는인지 편견입니다.

    지식의 저주는 공식적으로 자신이 알고있는 것을 전달하도록 훈련받지 않고 시간, 경험 및 피드백에 영향을 미치는 전문가에게는 매우 흔한 일입니다. 이것이 바로 Sitepoint에서 사람들이 우리의 게시물에 대한 정직한 피드백을 제공하도록 격려하는 이유이며, 모든 새로운 출판물에서 더 단순하고 더 간소화하려는 이유입니다. 아무도 저주에 면역되지 않습니다 - 일부는 그것에 의해 더 많은 영향을받습니다.

    자체 출판의 전염병

    최근 몇 년 동안 자체 출판은 실제로 이륙 한 것으로 보입니다. Brandon 이이 책과 마찬가지로 Leandpub에 의지하지 않는 사람들은 완전히 독창적입니다. 이 접근법은 실제로 프로세스 속도를 높이고 전문가가 경고적으로 빠른 속도로 이해 당사자의 손에 양질의 콘텐츠를 넣을 수 있지만, 더 많은 실수, 나쁜 콘텐츠 및 오타가 빠질 수 있습니다. . 다른 자체 출판 작가들을 괴롭히는 대부분의 문제들도 불행히도이 책을 괴롭 힙니다. 숙련 된 편집자가 없기 때문에 내용, 형태 또는 문법적, 심지어 구문 적 정확성에 대한 지침이없는 것 같습니다. 언어에 고유 한 사람들은 종종 엉망입니다. 원어민은 실수를하지 않으므로 공식 편집이 필요하지 않다고 생각하는 Y와 비슷합니다. 예를 들어 Y 기반 회사는 X X에서 누군가를 고용하여 X-language 버전의 사이트를 읽는 것과 유사합니다. 교정자의 유일한 근거는 언어 X의 원어민입니다. 당신은 정말로 내 모국어이지만 크로아티아 버전의 웹 사이트를 교정하기 위해 저를 고용하고 싶지는 않지만 더 나은 영어를 찾기가 어려울 것입니다. 언어 편집자. <..>

    결론 고급 사용자로서, 나는 책에 설명 된 모든 패턴이 아니더라도 대부분의 사전 지식을 가지고있었습니다. 그러나 내가 겪은 설명은 중간 사용자에게 잘 형성되고 접근 할 수있었습니다.하지만 제 생각에는 낮은 기술 중 하나가 아닙니다. 이 책의 내용은 매우 훌륭하고 Brandon은 코드에서 이론이 묘사 한 내용을 시연하는 데 탁월하지만, 초보자 개발자가 무엇이든 실질적인 것을 얻을 수없는 책 전체가 너무 복잡하다고 생각합니다.

    . PHP 커뮤니티는 일반적으로 나에게 보인다. 우리는 절대 초보자 책이있는 일종의“누락 된 링크”증후군으로 고통 받고있다 (“이것은 에코, 기능이다. 이것은 PHP 태그이다”). 그리고 이와 같은 중간 책, 또는 철갑 상어, 존스, 하르 제스 등이 내놓았지만 양질 화재로”접근한다.

    , 당신이 중간 개발자라면, 당신이 주변에 서있는 사람들이 그들에 대해 이야기하지만 당신은 이해하지 못하는 회의에서 패턴과 그 어색한 끄덕임에서 벗어나려고합니다. 당신이 초보자라면, 나는 당신이 이것을 구입하는 것이 좋습니다 - 아직뿐만 아니라. 먼저“에코”를 마스터하고 작곡가가 무엇인지 배우고이를 이빨로 가라 앉히십시오. . 사실, 당신이 패턴에 관심이있는 고급 초보자 (초보자는 매우 기본적으로 시작해야 함)라면, 나는 당신에게 박수를 보내고이 책을 다이빙하기 전에 다음과 같은 자료를 제공합니다 :

    .

    학습 가능한 에서 객체 지향적 pHP의 요소 객체 지향적 php

    객체 지향적 PHP가 적용됨 : 두 군대가 서로 싸우게하는

    Alejandro Gervasio의 굉장함 -이 사람이 쓴 모든 것을 읽으십시오

    작곡가 mvc

      내용 측면에서, 나는 책에 4/5를 줄 것이지만, 끝까지 근처에있는 것처럼 보이는 러쉬 작업, 오타 및 언어 오류 (공정하지만, 오타 제출이 있습니다. 내가 이미 수정으로 오염 된 Github Repo)와 전문 지침의 명백한 부족과 개인적으로 믿는 몇 가지 이상한 점은이 책에 걸려 넘어지는 초보자 (다양한 코드 샘플의 숫자로 클래스 이름을 시작), i ' 중 3/5에서 최종 점수를 종료
    • php 의 실제 설계 패턴에 대해 자주 묻는 질문 PHP에서 설계 패턴을 사용하면 어떤 이점이 있습니까?

      PHP의 설계 패턴은 소프트웨어 설계에서 일반적으로 발생하는 문제에 대한 재사용 가능한 솔루션을 제공합니다. 코드의 효율성과 유지 가능성을 향상시키는 방법을 제공합니다. 디자인 패턴을 사용하면 코드를보다 유연하고 재사용 가능하며 이해할 수 있습니다. 그들은 또한 특정 솔루션에 대한 표준 용어를 제공하기 때문에 개발자 간의 의사 소통을 더 쉽게 만듭니다.

      Decorator 패턴은 PHP의 어떻게 작동합니까?

      데코레이터 패턴은 당신을 허용하는 구조적 설계 패턴입니다. 특수 래퍼 객체 안에 이러한 객체를 배치하여 동적으로 개체에 새로운 동작을 추가합니다. PHP에서는 원래 클래스를 감싸고 추가 기능을 제공하는 데코레이터 클래스를 만들어 달성 할 수 있습니다. 데코레이터 클래스는 원래 클래스와 동일한 인터페이스를 구현하고 인스턴스를 보유합니다. 데코레이터에 대한 모든 호출은 원래 클래스로 전달 된 다음 추가 동작이 추가됩니다.

      설계 시스템, 패턴 라이브러리 및 스타일 가이드의 차이점은 무엇입니까? 디자인 시스템, 패턴 라이브러리 및 스타일 가이드는 모두 설계 및 개발의 일관성을 유지하는 데 도움이되는 도구입니다. 설계 시스템은 설계 및 개발 프로세스를 관리하는 철학, 원칙 및 도구를 포함하는 가장 중요한 구조입니다. 패턴 라이브러리는 설계 시스템의 하위 집합이며 재사용 가능한 설계 요소 및 구성 요소가 포함되어 있습니다. 반면에 스타일 가이드는 색상, 타이포그래피 및 간격과 같은 시각적 디자인 요소를 간략하게 설명하는 문서입니다.

      패턴 라이브러리를 사용하여 설계 일관성을 달성 할 수있는 방법은 무엇입니까? 패턴 라이브러리는 설계 일관성을 달성하는 데 핵심 도구입니다. 프로젝트의 다른 부분에서 사용할 수있는 재사용 가능한 구성 요소 세트를 제공합니다. 이 사전 정의 된 구성 요소를 사용하면 동일한 설계 패턴이 일관되게 사용되도록하여보다 응집력 있고 사용자 친화적 인 설계로 이어집니다.

      디자인 패턴에서 리팩토링의 역할은 무엇입니까?

      리팩토링은 기능을 변경하지 않고 구조를 개선하기 위해 기존 코드를 수정하는 프로세스입니다. 설계 패턴의 맥락에서 리팩토링을 사용하여 기존 코드베이스로 설계 패턴을 구현할 수 있습니다. 이것은 코드의 유지 관리 가능성, 가독성 및 종종 성능을 향상시킬 수 있습니다.

      “PHP의 실용적인 디자인 패턴”이라는 책은 설계 패턴을 이해하는 데 어떻게 도움이됩니까?

      책“PHP의 실용적인 디자인 패턴 ”PHP에서 설계 패턴을 이해하고 구현하는 포괄적 인 안내서를 제공합니다. 다양한 디자인 패턴에 대한 실제 예제와 자세한 설명을 제공하므로 독자가 개념을 이해하고 자체 프로젝트에 쉽게 적용 할 수 있습니다.는 PHP에만 적용 가능한 설계 패턴입니까? 아니요, 디자인 패턴은 PHP에만 제외되지 않습니다. 이들은 객체 지향 프로그래밍 언어에 적용 할 수있는 소프트웨어 설계 개념입니다. 구현은 언어마다 다를 수 있지만 기본 원칙은 동일하게 유지됩니다.

      디자인 패턴이 개발자 간의 커뮤니케이션을 향상시키는 방법?

      디자인 패턴은 소프트웨어 디자인의 특정 솔루션에 대한 표준 용어를 제공합니다. . 개발자 가이 용어를 사용하면 특정한 잘 이해 된 개념을 전달하여 오해를 줄이고 커뮤니케이션을 향상시킵니다.

      디자인 패턴 사용에 대한 단점이 있습니까?

      디자인 패턴은 많은 이점을 제공합니다. 또한 제대로 사용하지 않으면 복잡성을 도입 할 수도 있습니다. 디자인 패턴을 과도하게 사용하면 불필요한 추상화로 이어질 수 있으며 코드를 이해하고 유지하기가 더 어려워 질 수 있습니다. 따라서, 반복적 인 문제를 진정으로 해결할 때만 신중하게 사용하는 것이 중요합니다.

      PHP 프로젝트에서 디자인 패턴을 구현하기 시작할 수있는 방법은 무엇입니까? PHP 프로젝트는 해결하려는 문제를 이해하고 디자인 패턴이 해결할 수있는 반복 문제인지 확인하는 것입니다. 적절한 디자인 패턴을 식별 한 후에는 코드에서 구현을 시작할 수 있습니다. 목표는 코드를보다 효율적이고 유지 관리 할 수 ​​있도록하는 것이므로 항상 단순성과 명확성을 염두에 두는 것입니다.

위 내용은 서평 : PHP의 실제 설계 패턴의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.