문제

이 질문이 C#에 대해 묻는 것을 보았습니다. PHP에 대한 답변을 원합니다. 4 페이지의 Foreach 루프와 조건이있는 오래된 코드가있어 읽고 따르기가 어렵습니다. 이것을 어떻게 더 만들겠습니까? SPL 기능을 사용하려고 생각했지만 아직 관련된 내용을 완전히 이해하지 못했습니다.

도움이 되었습니까?

해결책

이 코드는 아마도 크게 정리할 수 있으며 SPL을 건드리지 않고 OO 방향으로 멀리 밀어 넣을 수 있습니다.

SPR은 foreach ()와 같은 언어 구조물 또는 count ()와 같은 내장형 언어 구조에서 정상적인 객체 동작을 변경하거나 배열 액세스 funcitons (모두 key (), next () 등과 같은 함수에서 변경하려는 경우에만 필요합니다. .

정리 제안 :

  • 코드에서 동일한 동작이 여러 번 (1 또는 2 이상) 수행되면 기능으로 나뉩니다. 이 동작을 배열의 모든 요소에서 수행하려면 사용을 고려하십시오. Array_walk. 배열을 걷는 것이 어떤 이유로 든 맞지 않는 경우 루프를 사용하십시오 :)
  • 의미 적으로 연결된 데이터의 몇 가지 인스턴스가 키보다 더 복잡한 경우 : 관련 작업과 함께 값 쌍이 클래스에서 래핑하는 것을 고려하십시오. 그러나 공식적으로 문서화 된 Assoc. 배열도 당신에게도 적합 할 수도 있습니다. 스타일과 데이터 유형에 따라 다릅니다. 여기서 중요한 것은 TH 데이터에서 작동하는 방법의 구조와 문서화입니다. 수업을 만들 든 아니든 상관 없습니다.
  • 위의 단계를 수행 한 후에는 새로 작성된 기능과 개체를 별도의 포함 파일로 나누십시오. 나는 수업에서 대부분의 모든 것을 감싸는 경향이 있으므로 대부분 하나의 클래스 PR이 있습니다. 파일. 그러나 일부 도우미 클래스는 메인 클래스와 파일을 공유합니다.

다른 팁

내가 당신이라면, 나는 시험 코드를 작성하는 것으로 시작합니다.

리팩토링하는 기능을 완전히 설명하는 일련의 테스트 케이스를 구축 할 수 있다면 계속 작동한다는 지식으로 코드를 안전하게 다시 작성할 수 있습니다.

phpunit 이것으로 시작하기에 좋은 장소 일 수 있습니다.

내가 당신을 올바르게 이해한다면, 당신은 4 페이지의 깊이로 묘사 된 루프 (및 같은) 중첩을 가지고 있으며, 당신이 들었던이 OO가 도움이 될 수 있는지 궁금합니다.

당신은 확실히 계속해서 코드를 리팩터링하여 중첩 수준을 줄이고 가독성을 향상 시키지만 객체 방향과 혼동하지 마십시오.

OO는 해당 데이터 구조를 조작하는 코드 옆에 데이터 구조의 정의를 넣기 위해 코드를 구성하는 방법입니다. 주요 목표 중 하나는 복잡성의 캡슐화를 제공하여 가독성을 돕는 것이지만 OO만이 유일한 방법은 아닙니다.

OO의 개념을 아직 이해하지 못하면 내부 루프 내부의 코드를 별도의 기능으로 분리하기 위해 코드를 리팩터링하는 것이 더 쉽다는 것을 알 수 있습니다.

나를 잘못 이해하지 마십시오. 저는 특히 개발자에게 더 효율적으로 설계를 논의 할 수있는 높은 수준의 개념을 제공하는 기술로서 OO를 옹호합니다. OO는 배울 가치가 있습니다.

그러나 OO에 대한 지식이 부족하여 루프에서 내부 코드를 끌어 내고 단일 목적 기능으로 넣는 것을 막지 마십시오.

(내가 당신의 OO 지식 수준을 오해했다면 사과드립니다.)

천천히 시작하십시오. 한 번에 조각을 리팩터링하십시오.

많은 배열을 통해 반복되는 경우와 같은 배열 기능을보십시오. array_map, array_walk, 그리고 친구들. 이것은 OO 리팩토링보다 기능적인 리팩토링이지만, 당신을 꽤 멀리 할 것입니다. 만약에 더 많은 OO로가는 것이 합리적이었습니다. 그러면 필요에 따라 적절한 클래스를 밀어 넣을 수있는 기능이 있습니다.

Johnathan과 Gnud의 좋은 조언. SPL에 대해 걱정하지 마십시오 리팩토링에 대해 자세히 알아보십시오, 그리고 무엇을 조사하십시오 리팩토링 도구는 PHP에 사용할 수 있습니다.

또한 독서를 충분히 추천 할 수 없습니다 레거시 코드로 효과적으로 작동합니다:

alt text

그리고 물론 표준 리팩토링 책:

Alt Text http://ecx.images-amazon.com/images/i/519xt0der6l._sl500_BO2,204,203,200_AA219_PISITB-Sticker-dp-Arrow,-24,-23_SH20_OU01_.JPG

PHP는 코드 냄새를 깨끗하게 유지하기 어려운 언어이지만 약간의 인내로 인해 수행 할 수 있습니다! 그리고 코드베이스를보아야하는 매일 자신에게 감사 할 것입니다.

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