시리즈의 두 번째 부분에서는 가독성을 향상시키기 위해 코드 리팩토링에 대한 몇 가지 질문을 공유했습니다. 이 섹션에서는 확장 성이라는 또 다른 측면에 대해 논의 할 것입니다. 가능한 빨리 새로운 리팩토링 세계에 들어갈 수 있도록 이전 섹션에서와 동일한 실용적인 질문/토론 접근 방식을 취할 것입니다. 확장 가능한 코드는 표준 디자인 패턴이든 정상적인 논리적 흐름이든 재사용 가능하고 논리적으로 명확하며 잘 알려진 패턴을 따르는 코드 스 니펫을 나타냅니다. 모듈 식 코드는 종종 확장 가능하지만, 모 놀리 식 코드는 종종 확장 가능하지 않지만 모 놀리 식 코드는 더 효율적일 수 있습니다 두 세계. 우리가 논의 할 확장 가능한 코드의 주요 측면에는 논리적 확장 성 (정상 논리 흐름 및 설계 패턴), 모듈 식 설계 및 디커플링 및 캡슐화가 포함됩니다.
논리적 확장 성
대부분의 코드 블록이 정상적인 논리 흐름을 따르나요? 작은 논리 문제를 처리 할 때는 올바른 구조 (Foreach, while 등)를 사용하고 있는지 확인하십시오. "올바른 구조"에 의해이 작업에 가장 논리적이고 일반적인 언어 기능을 사용해야합니다. 예를 들어, 간단한 배열을 통한 반복은 Foreach를 사용해야하며, 이러한 간단한 반복에 루프를 사용하는 것은 PHP와 같은 언어의 일반적인 프로세스가 아닙니다. 이러한 간단한 작업의 경우 사용하는 것은 훨씬 더 익숙하지 않습니다. 이 경우 이유가있을 수 있습니다.이 경우 사용자 정의 사례를 문서화하는 것에 대한 이전 섹션을 기억하십시오. -
복잡한 솔루션은 표준 설계 패턴을 따릅니다. PHP를 처음 사용하기 시작했을 때 디자인 패턴에 대해 많이 알지 못했습니다. 이제 디자인 패턴을 사용하는 것은 이해하기 쉽고 향후 개발을 고려하기 때문에 대규모 프로젝트의 필수품이라는 것을 알았습니다. 잘 정의 된 표준 패턴을 사용하여 해결 해야하는 일반적인 복잡한 문제는 특정 클래스의 다양한 인스턴스를 만드는 것입니다. 그러나 왜 공장 디자인 패턴을 사용해야합니까? 이것은 논란의 여지가 있지만 일반적인 지침은 다음과 같습니다. 동일한 인터페이스의 다른 구현이있는 경우이 패턴이 적용될 수 있으며 구현 오브젝트를 동적으로 만들어야합니다. 또 다른 경우는 동일한 클래스의 많은 동적 객체가 생성 될 때이지만 숫자는 런타임에만 알려져 있습니다. 예를 들어, 최신 GUI 집약적 인 웹 애플리케이션은 데이터베이스 레코드에 대한 동적 양식 입력 라인을 만들어야 할 수도 있습니다. 설계 패턴이 유용한 시점에 대한 수많은 예가 있습니다.
-
모듈 식 디자인
코드 구조가 모듈 식 디자인을 따르나요? 모듈 식 디자인은 응용 프로그램을 모듈로 나누는 것을 의미합니다. 더 작은 응용 프로그램으로 구성된 대규모 응용 프로그램은 개발하기 쉽고 확장 및 유지 관리가 더 쉽습니다. 각 모듈은 관련 기능과 기능 세트를 수집하여 한 엔티티에서 결합해야합니다. 핵심 기능 및 응용 프로그램 입력 지점도 모듈로 간주 될 수 있습니다. 그런 다음 새 모듈을 추가하여 미래의 기능을 추가 할 수 있습니다. 어떤 사람들은 이러한 방식으로 사용되는 모듈을 플러그인이라고합니다. 그러나 애플리케이션을 위해 어떤 설계 및 구조를 선택하든 모듈/플러그인을로드하고 기본 구조 등을 제거하고 핵심 모듈을 개발하기 전에 이러한 문제를 고려해야합니다. 모듈의 코드 그룹이 단일 하위 엔티티 역할을하고 최소한의 매개 변수가있는 최상위 모듈에서 사용되는 경우 새 모듈로 분할하지 않겠습니까? 일반적으로 자식 엔티티가 여러 클래스로 분할되어 일부 보조 작업을 수행하면 새 모듈로 옮기는 것을 망설이지 않습니다. 유틸리티 모듈은 잘 설계된 모듈 식 애플리케이션에서 고아 코드에 대한 영리한 솔루션입니다. 고아 코드가있을 때마다 코드 스 니펫과 작은 작업을 처리하는 유틸리티 모듈로 옮깁니다. 이 모듈은 일반적으로 고아 함수 및 서브 클래스로 구성됩니다. 이러한 작업이 충분히 커질 때마다, 나는 그것들을 고유 한 모듈로 옮기기 시작합니다. 이는 지속적인 리팩토링 프로세스입니다. -
모듈이 최소 의존성입니까? 모듈은 가능한 한 자기 포함되어야합니다. 소프트 모듈 종속성은 자연스럽고 양호합니다. 예를 들어, "인벤토리"모듈은 균질 한 전자 상거래 시스템을 얻기 위해 "계정"모듈에 따라 다르지만 많은 어려운 종속성이 나쁩니다. 그들은 디버깅과 배포를 더욱 어렵게 만듭니다. 모듈 간 종속성을 적게 보장하려면 수시로 코드 기반을 반대하여 모듈간에 어려운 종속성이 있는지 확인해야합니다. 가능하면 그들을 지우고 가능하다면 두 모듈을보다 일반적인 이름으로 하나로 병합해야합니다. 예를 들어, 전자 상거래 애플리케이션에는 "프로젝트"모듈과 "인벤토리"관리 모듈이있을 수 있으며 재고의 클래스는 프로젝트에서 많은 클래스를 사용하며 그 반대도 마찬가지입니다. 프로젝트를 처리하기위한 하위 모듈이 포함 된 두 가지를 병합하고 모듈의 이름을 "재고"로 바꿉니다.
-
디퍼 커플 링 및 포장
기능, 방법 및 클래스가 상당히 분리되어 있습니까? 데이터베이스에서 결과를 표시하기 위해 페이징 기능을 추가하는 것은 매우 일반적인 작업입니다. 실제로, 초기 PHP 개발 경력 동안, 나는 결과를 촬영하기위한 몇 가지 코드를 썼습니다. 그런 다음 페이징 알고리즘을 사용하여 사용하는 각 구성 요소와 함께 사용하여 사용하여 페이징 알고리즘을 분리하기로 결정했습니다. 논리 나 코드를 반복하는 것을 발견 할 때마다 코드의 재사용 성과 확장 성을 향상시키기 위해 약간의 분리를해야 할 수도 있습니다. -
모듈과 구성 요소가 상당히 분리 되었습니까? 의존성을 최소로 유지하면서 올바른 방법으로 분리하고 있습니다. 두 가지 관련된 것들 사이에는 100% 분리가 없으므로 자연스럽기 때문에 코드를 더 복잡하게 만들지 않기에는 너무 많아야합니다. 가이드 라인으로, 코드베이스의 모듈과 구성 요소가 많은 공통점없이 서로 통신 할 수있을 때까지 분리하십시오. 복잡성이 증가하지 않을 때마다 의존성을 줄이는 것은 가용성 및 확장성에 비례합니다. 복잡성이 증가하기 시작하면 관계는 반비례하기 시작합니다.
-
요약
이 섹션에서는 논리적 확장 성, 모듈 식 설계, 디퍼 커플 링 및 캡슐화의 세 가지 주요 측면에 중점을 둔 확장 성 코드 리팩토링에 대해 논의합니다. 이제 더 나은 응용 프로그램을 개발하고 유지하는 방법을 더 잘 이해하기 시작했습니다. 마지막 섹션에서는 가독성과 확장 성을 손상시키지 않고 효율성을 위해 리팩터링하는 방법에 대해 논의 할 것입니다. Fotolia의 사진
코드 리팩토링 (FAQ) 에 대한 질문이 자주 묻습니다
PHP 코드 리팩토링의 중요성은 무엇입니까?
Code Refactoring은 PHP 개발의 핵심 프로세스입니다. 소프트웨어의 비 기능적 특성을 개선하기 위해 외부 동작을 변경하지 않고 기존 코드를 재구성하는 것이 포함됩니다. 리팩토링을 통해 코드를보다 쉽게 읽고, 유지 관리하고, 확장 할 수 있습니다. 소프트웨어의 숨겨진 오류를 식별하고 수정하고 성능을 향상시키는 데 도움이됩니다. 또한 다른 개발자가 코드를 이해하고 처리 할 수있게하여 개발 팀의 전반적인 생산성을 높일 수 있습니다.
PHP 코드의 가독성을 향상시키는 방법은 무엇입니까?
PHP 코드의 가독성 향상에는 다양한 관행이 필요합니다. 먼저 변수, 기능 및 클래스에 의미있는 이름을 사용하십시오. 둘째, 기능과 클래스를 작게 유지하고 단일 작업에 중점을 둡니다. 셋째, 댓글을 사용하여 복잡한 코드 부품의 목적을 설명하지만 코드를 엉망으로 만들기 위해 불필요한 의견을 피하십시오. 마지막으로, 올바른 압입, 공간 사용 및 일관된 이름 지정 규칙과 같은 PHP의 표준 코딩 규칙을 따르십시오.
PHP 코드의 맥락에서 확장 성이란 무엇입니까?
PHP 코드의 확장 성은 기존 시스템 성능 또는 기능에 영향을 미치지 않고 새로운 기능을 확장하거나 수정하는 코드의 능력을 나타냅니다. 이는 모듈 식 코드를 작성하고, 객체 지향 프로그래밍 원칙을 사용하고, 견고한 원칙에 따라 달성됩니다. 확장 가능한 코드는 유지 관리, 업그레이드 및 확장이 쉽기 때문에 소프트웨어 개발에 이상적인 자산이됩니다. 내 PHP 코드를 더욱 확장 가능하게 만드는 방법은 무엇입니까?
PHP 코드를보다 확장 가능하게 만드는 데는 다양한 관행이 포함됩니다. 먼저, 모듈 식 코드를 작성하고 독립적으로 수정하거나 확장 할 수있는 작은 독립 장치 (모듈)로 구성하십시오. 둘째, 캡슐화, 상속 및 다형성과 같은 객체 지향 프로그래밍 원칙을 사용하여 재사용 가능하고 확장 가능한 코드를 만듭니다. 셋째, 유지 관리, 이해 및 확장이 쉬운 소프트웨어를 설계하기위한 지침을 제공하는 견고한 원칙을 따르십시오.
코드 리팩토링의 일반적인 과제는 무엇입니까?
코드 리팩토링은 여러 가지 이유로 어려울 수 있습니다. 첫째, 코드 및 소프트웨어의 기능에 대한 깊은 이해가 필요합니다. 둘째, 특히 대형 코드베이스의 경우 시간이 많이 걸릴 수 있습니다. 셋째, 제대로 작동하지 않으면 새로운 오류가 발생할 수 있습니다. 마지막으로 테스트 및 배포 프로세스를 변경해야하므로 간섭을 유발할 수 있습니다.
코드 리팩토링의 도전을 극복하는 방법은 무엇입니까?
코드 리팩토링의 과제를 극복하려면 여러 전략이 포함됩니다. 먼저 리팩토링 프로세스를 시작하기 전에 코드 및 소프트웨어의 기능을 더 깊이 이해하십시오. 둘째, 자동 리팩토링 도구를 사용하여 시간을 절약하고 새로운 오류를 도입 할 위험을 줄입니다. 셋째, 코드의 작은 부분으로 시작하여 코드를 점차적으로 리팩터링합니다. 마지막으로, 리팩토링 프로세스 중에 도입 된 오류를 포착 할 수있는 강력한 테스트 프로세스가 있는지 확인하십시오.
코드 리팩토링의 모범 사례는 무엇입니까?
코드 리팩토링을위한 모범 사례에는 리팩토링 프로세스를 시작하기 전에 코드 및 기능 이해, 코드를 점진적으로 리팩토링하고 자동 리팩토링 도구를 사용하며 강력한 테스트 프로세스가 포함됩니다. 또한 리팩토링 프로세스와 프로젝트에 미치는 영향에 대해 팀과 통신하는 것이 중요합니다.
내 리팩토링 코드가 오류가 없는지 확인하는 방법은 무엇입니까?
[ 코드 리팩토링이 오류가 없는지 확인하려면 강력한 테스트 프로세스가 필요합니다. 단위 테스트를 사용하여 코드의 개별 구성 요소를 테스트하고 통합 테스트를 사용하여 이러한 구성 요소가 상호 작용하는 방법을 테스트하고 시스템 테스트를 사용하여 전체 소프트웨어를 테스트하십시오. 또한 자동 테스트 도구는 리팩토링 프로세스 중에 도입 될 수있는 오류를 캡처하는 데 사용됩니다. ]
코드 리팩토링 작업이 성공했는지 여부를 측정하는 방법은 무엇입니까?
코드 리팩토링 작업이 성공했는지 여부를 측정하는 방법에는 여러 가지가 있습니다. 첫째, 리팩토링 된 코드는 읽고 유지하고 확장하기가 더 쉬워야합니다. 둘째, 소프트웨어의 성능을 향상시켜야합니다. 셋째, 코드의 오류 수를 줄여야합니다. 마지막으로 개발 팀은 코드를 더 쉽게 처리해야합니다.
코드 리팩토링에 대해 더 많이 배울 수있는 좋은 리소스는 무엇입니까?
코드 리팩토링에 대해 더 많이 배울 수있는 좋은 리소스가 많이 있습니다. 이 주제에 관한 인기있는 책으로는 Martin Fowler의“Refactoring : 기존 코드의 디자인 개선”과 Michael Feathers의“유산 코드의 효율적인 사용”이 포함됩니다. 또한 Coursera, Udemy 및 Medium과 같은 플랫폼의 코드 리팩토링에 관한 많은 온라인 자습서, 코스 및 기사가 있습니다.