탄탄한 원칙 PHP : 위반의 예를 설명합니다.
탄탄한 원칙 PHP : 위반의 예를 설명합니다.
견고한 원칙은 소프트웨어 디자인을보다 이해할 수 있고 유연하며 유지 관리하기 쉽게 만드는 객체 지향 프로그래밍의 일련의 설계 원칙입니다. PHP에서 이러한 원칙은 웹 개발에 광범위한 사용으로 인해 특히 관련이 있습니다. 각 원칙을 세분화하고 위반의 예를 제공합시다.
-
단일 책임 원칙 (SRP) :
- 정의 : 클래스는 변경해야 할 이유가 하나만 있어야합니다. 즉, 일자리가 하나만 있어야합니다.
- 위반 예 : 사용자 데이터, 인증 및 이메일 전송을 처리하는
User
클래스를 고려하십시오. 수업에는 여러 책임이 있기 때문에 SRP를 위반합니다. 이메일 시스템을 변경 해야하는 경우 사용자 관리에 대한 다른 것이 변경되어야하더라도User
클래스는 변경해야합니다.
-
오픈/폐쇄 원리 (OCP) :
- 정의 : 소프트웨어 엔티티 (클래스, 모듈, 기능 등)는 확장을 위해 열려 있어야하지만 수정을 위해 닫아야합니다.
- 위반 예 : 신용 카드를 통해 지불을 처리하는
PaymentProcessor
클래스가 있다고 가정합니다. PayPal을 새로운 지불 방법으로 추가하려면 기존PaymentProcessor
클래스를 수정 해야하는 경우 OCP를 위반합니다. 대신, 우리는 클래스를 확장하거나 다형성을 사용하여 기존 코드를 변경하지 않고 새로운 지불 방법을 추가해야합니다.
-
Liskov 대체 원리 (LSP) :
- 정의 : 프로그램의 객체는 해당 프로그램의 정확성을 변경하지 않고 하위 유형의 경우에 교체 할 수 있어야합니다.
- 위반 예 :
setWidth
및setHeight
메소드가있는Rectangle
클래스와Rectangle
연장하는Square
등급을 상상해보십시오.Square
setWidth
무시하여 높이를 설정하면Rectangle
예상되는Square
물체를 사용하여 LSP를 위반하여 예상치 못한 동작으로 이어질 수 있습니다.
-
인터페이스 분리 원리 (ISP) :
- 정의 : 클라이언트는 사용하지 않는 인터페이스를 구현해서는 안됩니다.
- 위반 예 : Methods
print()
,scan()
및fax()
가 포함 된IMachine
인터페이스가 있다고 가정합니다.IMachine
구현하지만print()
만 필요로하는BasicPrinter
클래스를 만들면 사용되지 않은 방법으로 끝나는 ISP를 위반합니다.
-
의존성 반전 원리 (DIP) :
- 정의 : 높은 수준의 모듈은 저수준 모듈에 의존해서는 안됩니다. 둘 다 추상화에 의존해야합니다. 또한 추상화는 세부 사항에 의존해서는 안됩니다. 세부 사항은 추상화에 따라야합니다.
- 위반 예 :
ReportGenerator
클래스가 파일에 보고서를 작성하기 위해FileWriter
직접 인스턴스화하는 경우,ReportGenerator
콘크리트 클래스 (FileWriter
)에 의존하기 때문에 DIP를 위반합니다. 대신IWriter
인터페이스와 같은 추상화에 따라야합니다.
PHP에 탄탄한 원칙을 적용 할 때 개발자가 저지르는 일반적인 실수는 무엇입니까?
- 과잉 엔지니어링 : 개발자는 때때로 너무 많은 작은 클래스 나 인터페이스를 만들어 복잡성을 높이고 유지 보수가 더 어려워집니다. 책임을 밝히는 것이 좋지만 실용적인 요구와 균형을 이루어야합니다.
- 실제 제약을 무시합니다 . 때로는 성능 요구 사항 또는 프로젝트 타임 라인과 같은 실제적인 고려 사항이 견고한 원칙에 대한 엄격한 준수와 충돌 할 수 있습니다. 개발자는 실제 제약보다 탄탄한 원칙을 우선 순위로 삼는 실수를 할 수 있습니다.
- 예를 들어, 일부 개발자 는 SRP가 클래스가 하나의 방법만을 가질 수 있다고 생각할 수 있습니다. 반드시 단일 기능이 아니라 변경해야 할 이유에 관한 것입니다.
- 종속성 주입을 사용하지 않음 : 개발자는 종종 종속성 주입을 사용하는 대신 하드 코드 종속성을 사용하여 DIP에 반대합니다. 이로 인해 코드는 덜 유연하고 테스트하기가 어렵습니다.
- 리팩토링 무시 : 견고한 위반이 식별 되더라도 개발자는 시간 제약이나 버그 도입에 대한 두려움으로 인해 코드를 리팩토링하지 않아 기술 부채로 이어질 수 있습니다.
PHP 코드에서 탄탄한 원칙 위반을 어떻게 식별 할 수 있습니까?
- 코드 검토 : 정기적으로 코드를 검토하면 위반을 식별하는 데 도움이 될 수 있습니다. 여러 책임, 하드 코딩 된 종속성 또는 클래스가 사용하지 않는 방법에 의존하도록 강요하는 클래스를 찾으십시오.
- 정적 코드 분석 도구 : PHPSTAN 또는 PSALM과 같은 도구는 특정 코딩 표준에 대한 코드를 분석 할 수 있으며 하드 코딩 된 종속성을 감지하여 DIP와 같은 원칙 위반을 식별하는 데 도움이 될 수 있습니다.
- 단위 테스트 : 단위 테스트를 작성하면 특히 LSP의 위반이 나타날 수 있습니다. 하위 유형을 대체 할 때 테스트가 실패하면 위반이 나타날 수 있습니다.
- 종속성 분석 : 클래스 종속성을 매핑 할 수있는 도구는 높은 수준의 모듈이 저수준 모듈에 직접적으로 의존하는 위치를 보여줌으로써 DIP 위반을 식별하는 데 도움이 될 수 있습니다.
- 코드 냄새 : SRP 또는 OCP의 위반을 나타낼 수있는 긴 방법, 대규모 클래스 또는 스위치 문과 같은 코드 냄새를 찾으십시오.
탄탄한 원칙을 위반하는 PHP 코드를 리팩터하려면 어떤 단계를 수행해야합니까?
- 위반 식별 : 위에서 설명한 방법을 사용하여 위반이 발생하는 위치를 정확히 찾아냅니다.
- 리팩토링 계획 : 필요한 변경 사항을 결정하십시오. SRP의 경우 큰 클래스를 작은 클래스로 나누는 것을 의미 할 수 있습니다. DIP의 경우 인터페이스를 도입하고 종속성 주입을 사용하는 것이 포함될 수 있습니다.
-
변경 사항 구현 :
- SRP의 경우 : 수업을 여러 클래스로 나누고 각각 단일 책임이 있습니다.
- OCP의 경우 : 다형성을 사용하거나 새로운 클래스를 소개하여 기존 코드를 수정하지 않고 기능을 확장하십시오.
- LSP의 경우 : 하위 유형이 프로그램의 정확성에 영향을 미치지 않으면 서 기본 유형으로 대체 할 수있는 방식으로 행동하는지 확인하십시오.
- ISP의 경우 : 대형 인터페이스를 더 작고 집중된 인터페이스로 나눕니다.
- DIP의 경우 : 추상화 (인터페이스)를 소개하고 의존성 주입을 사용하여 고급 및 저수준 모듈을 해체하십시오.
- 쓰기 테스트 : 리팩토링 전후에 단위 테스트를 작성하여 변경 사항이 기존 기능을 중단하지 않도록하십시오.
- 반복 및 정제 : 리팩토링은 종종 반복적 인 과정입니다. 변경 후 코드를 다시 검토하여 탄탄한 원칙과 일치하고 새로운 위반을 도입하지 않도록하십시오.
- 지속적인 개선 : 코드 검토 및 지속적인 통합과 같은 관행을 채택하여 코드베이스가 시간이 지남에 따라 견고한 원칙과 정렬되도록합니다.
이러한 단계를 수행함으로써 PHP 코드를 효과적으로 리팩터링하여 견고한 원칙에 더 가깝게 준수하여 유지 관리 가능성과 유연성을 향상시킬 수 있습니다.
위 내용은 탄탄한 원칙 PHP : 위반의 예를 설명합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사
오구리 캡 빌드 가이드 | 예쁜 더비 무스 스마 (Derby Musume)
4 몇 주 전
By Jack chen
Agnes Tachyon 빌드 가이드 | 예쁜 더비 무스 스마 (Derby Musume)
3 몇 주 전
By Jack chen
잔디 원더 빌드 가이드 | Uma Musume Pretty Derby
3 몇 주 전
By Jack chen
KB5060829를 수정하는 방법 설치 및 기타보고되는 버그
4 몇 주 전
By DDD
<night> : 숲에서의 99 박 - 모든 배지 및 잠금 해제 방법
3 몇 주 전
By DDD

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
