LedgerSMB 리팩토링 경험을 드리겠습니다. 우리는 초기에 다르게 일을하기로 결심했지만 여전히 당신이 묘사 한 것을 정확하게 수행하고 있지만 많은 접착제 방법을 사용하지 않고 있습니다 (우리는 많은 접착제 방법을 가지고 있지만 btw는 아닙니다).
두 개의 코드베이스를 가진 삶
LedgerSMB는 약 5 년 동안 두 개의 코드베이스로 살아남 았으며 이전 코드베이스가 제거되기 전에 몇 배 더 늘어날 것입니다. 오래된 코드베이스는 참으로 공포입니다. 나쁜 db 디자인, Perl IS->some_func(\%$some_object);
은 스파게티 은유가 때때로 사용되는 이유를 정확히 보여주는 코드와 같이 구성합니다 (모듈과 백, 언어 사이에 운율이나 이유가없는 실행 경로). 새로운 코드베이스는 db 쿼리를 저장 프로 시저로 이동하고 요청 처리를위한보다 깔끔한 프레임 워크 등을 제공하여이를 피합니다.
우리가 가장 먼저 결정한 것은 모듈별로 모듈을 리팩토링하는 것입니다. 즉, 특정 영역의 모든 기능을 새 모듈로 옮긴 다음 이전 코드를 새 모듈에 연결해야합니다. 새로운 API가 깨끗하다면 별 문제가되지 않습니다. 새로운 API가 문제가되지 않으면 새로운 API에서 조금 더 열심히 일하라는 초대입니다 ....
두 번째는 새 코드가 이전 코드의 논리에 액세스해야하는 경우가 많다는 것입니다. 이것은 추한 접착제 방법으로 이어지지 만 항상 피할 수는 없기 때문에 가능한 한 피해야합니다. 이 경우 접착제 방법을 최소화하고 가능한 한 피해야하지만 필요할 때 사용해야합니다.
이 작업을 수행하려면 특정 영역의 모든 기능 을 다시 작성 해야 합니다. 예를 들어, 모든 고객 정보 추적 코드를 한 번에 다시 작성할 수 있으면 이전 코드에서이를 호출하는 코드가 작동하기 어렵고 새 코드에서 이전 코드로 디스패치되는 것이 최소화됩니다.
두 번째로, 합리적인 추상화가 있다면 호출 할 API의 수준과이를 깨끗하게 유지하는 방법을 선택할 수 있어야합니다. 그러나 API를 호출하는 부분을 다시 작성하여 상당히 깨끗하게 생각해야합니다.
매우 복잡한 비즈니스 도구 영역이 많이 있습니다. 모든 복잡성을 제거 할 수는 없습니다. 그러나 특히 필요한 작업을 수행하는 깨끗한 API와 해당 API를 건설적으로 활용하는 모듈에 중점을 두어 관리 할 수 있습니다. 접착제는 나머지 호출 코드를 다시 작성하는 것이 더 빠를 수 있다는 점을 고려한 후에 만 최후의 수단이되어야합니다.