문제

저는 최근 PHP로 작성된 엔진을 사용하는 웹 기반 게임 프로젝트에 참여했습니다.게임은 잘 작동하지만 더 강력하고 더 많은 기능을 가질 수 있습니다. 그리고 코드는 오래되고 상당히 보기 흉합니다.

이 코드(그리고 일반적으로 많은 PHP 코드)의 문제는 그것이 현재의 위치로 발전했지만 구조가 매우 좋지 않고 거의 동일하게 잘라내거나 붙여넣은 코드 조각이 많으며 많이 사용한다는 것입니다. 함수가 관련된 경우에도 전역의.물론 단일 단위 테스트는 어디에도 없으며 코드는 특정 DB를 사용하도록 하드 코딩되어 있으며 코드를 호출하는 웹 페이지의 $_REQUEST 문자열에 의존합니다.

올바른 일은 코드 조각을 하위 기능으로 꺼내서 정리하고 몇 가지 단위 테스트를 추가하여 계속 작동하는지 확인하고 그 과정에서 몇 가지 모의 개체를 추가하는 것입니다.그러나 이 작업을 완전히 수동으로 수행하는 것은 지루하고 오류가 발생하기 쉽습니다. 어떻게 수행하는지 궁금합니다. 예를 들어 도움이 될 수 있는 IDE나 도구가 있습니까?정의된 코드 조각에서 함수를 생성하고, 어떤 변수가 매개변수가 되어야 하는지 제안하고, 값이나 참조로 자동으로 $this-> 참조를 추가하는 등의 도구를 갖고 싶습니다.

너무 많은 질문인가요? 아니면 좋은 해결책이 있나요?

감사해요!

도움이 되었습니까?

해결책

Allan, 저는 이렇게 강력한 리팩토링 도구를 본 적이 없습니다.Java용 Eclipse 리팩토링조차도 해당 기능이 완전하지 않습니다.그러나 리팩토링에 대한 몇 가지 일반적인 힌트가 있습니다.저는 보통 두 단계로 애플리케이션을 리팩터링합니다.

1.물건을 분리하세요. DB 및 모델 관련 내용을 추출하여 메인 코드에서 추출합니다.일부 객체 표현이 도움이 될 것입니다.확인하다 활성 레코드 또는 다오 누구에게나 패턴 ORM 일하다.HTML 코드를 기본 코드에서 가져와 템플릿 파일로 이동할 수 있습니다.뷰 로직 처리를 강력하게 지원하는 멋진 템플릿 엔진을 확인해 보세요. 똑똑하다.

2.MVC 프레임워크에 항목을 추가합니다. MVC 웹 애플리케이션에 매우 잘 맞는 강력한 아키텍처입니다.PHP 프레임워크 중 하나를 사용하여 느슨한 PHP 파일을 컨트롤러 메서드에 연결합니다.프레임워크를 사용하면 URL, HTTP 요청, 매개변수 전달, 로그인 정보 관리를 쉽게 할 수 있으며 일반적으로 일부 액세스 제어 메커니즘을 제공합니다.

그러나 가장 중요한 것은 다음과 같습니다.수리할 수 없을 정도로 물건을 부수지 마십시오.재개발이 아니라 리팩토링입니다 ;-)

다른 팁

이 기사에서는 오래된 추악한 코드를 리팩토링/재개발하는 것의 위험성을 강조합니다.

http://www.1729.com/blog/EconomicsOfTestingUglyCode.html

내 접근 방식은 일반적으로 한 번에 하나의 작은 문제를 해결하는 것입니다. 이는 새 코드에 영향을 주지 않고 "나중에" 처리할 수 있는 인터페이스 뒤에 이전 코드의 대부분을 숨기는 것부터 시작합니다.이렇게 하면 내가 작성하는 모든 것이 잘 설계되고 탄탄한 구조를 가질 수 있지만 리팩터링을 시도하고 몇 주/개월/년에 걸쳐 잘못된 코드를 테스트하는 데 너무 많은 시간을 낭비할 필요가 없습니다.

어떤 도구도 보기 흉한 코드를 가져와 어떻게든 다시 멋지게 만들 수는 없습니다."공식으로 돌아가기"라는 문구는 성숙한 프로젝트에 있어서 상당히 무서운 전망이지만, 나에게는 전혀 문제가 되지 않습니다...

괜찮은 MVC 프레임워크로 포팅하는 것이 좋습니다.그렇게 하면 모든 클래스가 최적화되도록 구조적 재작성을 수행하는 것이 나쁜 시기가 아닐 수 있습니다(진화하는 코드에서 자연스럽게 발생하는 일은 거의 없습니다).시간도 오래 걸리고 뜻대로 되지 않을 때 고통도 따르게 됩니다.

이는 큰 진전이지만 코드가 썩도록 방치되면 이런 일이 발생합니다.

다른 옵션:

  1. 모든 새로운 코드가 설정된 체제를 따르고 이전 코드가 천천히 재개발되는 부분적인 재구성을 수행합니다.
  2. 버그만 수정하고 구조 조정은 하지 마세요.

나는 너의 고통을 느낀다.그러나 나는 그런 도구에 대해 들어본 적이 없습니다. 적어도 PHP에 대해서는 들어본 적이 없습니다.

나는 언어가 어떤 종류의 반자동 리팩토링도 허용할 만큼 충분히 구조화되어 있지 않다고 생각합니다.어쨌든 이 작업을 수행할 수 있는 응용 프로그램은 없지만 긍정적인 측면에서는 모든 작업을 손으로 수행하면 소스에 더 친숙해질 수 있으며 나중에 자신보다 훨씬 더 잘 아는 것이 도움이 될 수 있습니다. 자동화된 도구를 사용하면 됩니다.

바로 이것저것 검색하다가 Accurev 고객의 흥미로운 블로그를 발견했습니다.

http://blog.accurev.com/2008/09/17/dr-strangecode-or-how-i-learned-to-stop-worrying-and-love-old-code/

도구 상자에 올바른 버전 제어 도구가 있으면 나쁠 수 없습니다.

내 경험상 이 상황에서는 완전히 다시 작성하는 것이 훨씬 더 경제적입니다.

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