2009-07-31 3 views
0

구조적으로 재난 인 ASP.NET 응용 프로그램을 상속 받았지만 작동하며 라이브 프로덕션 환경에서 사용됩니다. 앞으로는 응용 프로그램을 향상시키기 위해 완전히 다시 설계해야하지만 기존 프론트 엔드 기능을 유지해야합니다. 나에게 묻는 변경 사항은 프론트 엔드 기능 또는 사용자 상호 작용보다 백엔드 통합입니다. .기능적 동작을 유지하면서 시스템을 근본적으로 재 설계하는 방법은 무엇입니까?

기본적인 문제는 비즈니스 논리의 대부분이 저장된 procs에 있으며 나머지는 UI 코드 숨김 파일에 있습니다. 말할 필요도없는 비즈니스 도메인 모델이 없습니다. 데이터베이스에서 로직을 리팩토링하고 UI에서 코드로 리팩토링해야하지만 애플리케이션의 동작은 기본적으로 이러한 저장된 procs에 묶여있다. 그래서 문제는 이것입니다 -이 종류의 완전한 재 설계에 대해 어떻게 생각하십니까?

리팩토링을 작은 단계로 이해합니다. 파울러 등을 읽었습니다. 비슷한 과정을 거친 사람들로부터 실질적인 조언을 찾고 있습니다.

감사합니다.

편집 여러 릴리스주기 동안 반복적으로 반복적으로 작업하고 싶습니다.

답변

3

IMHO 가장 중요한 일은 보존하려는 전체 기능을 포괄하는 다양한 테스트를 개발하는 것입니다.

필자는 필기 테스트가 지저분한 코드베이스에서 매우 어렵다는 것을 알고 있지만 일부 종속성 중단 기술을 통해 여전히 가능하다는 것을 알고 있습니다. 나는 "Working effectively with legacy code"을 추천 할 것이기 때문에 리팩토링의 실질적인 측면에 관한 것입니다.

0

리팩토링하는 동안 행동을 보존하는 데 도움이되는 훌륭한 단위 테스트 세트가 piotsrz's answer과 강력하게 동의합니다. 이 테스트를 연속 통합 시스템에 추가하면 모든 개발자의 모든 커밋에 대한 빠른 피드백을 얻을 수 있습니다.

이 주제에 대한 또 다른 좋은 책은 동작을 보존하는 아키텍처 변환에 대한 여러 반복 기술을 설명하는 Refactoring to Patterns입니다.

2

처음에는 큰 어려움이 있습니다.이 재 설계 작업을 정말로 수행해야합니까? 데이터베이스 디자인이 더 많거나 적은 경우라면 새로운 재료를 설계하고 기존 재료를 그대로 둘 수 있습니까? 모든 반사는 혼란을 정리하기를 갈망하지만 비즈니스 사용자의 관점에서 어떤 수준의 투자가 필요한 것이며 복수가 무엇입니까?

이미 반복 변경을 접근 방식으로 확인했습니다. 이렇게하려면 시스템에 일정 수준의 세분화가 있어야 다른 사람에게 영향을주지 않고 일부 조각을 변경할 수 있습니다. 귀하의 아이디어는 새로운 비즈니스 가치를 제공하고 동시에 응용 프로그램의 일부를 정리함으로써 많은 가치있는 결과물에 대한 변경 비용을 효과적으로 상환하고 새로운 물건을 인도하는 데 "가비지 콜렉션 세금"을 부과합니다. 그 "세금"을 받아 들일 수 있습니까?

그래서 세분성 가정은 확인해야 할 사항이라고 생각합니다. 작은 조각을 확인하십시오. 리팩토링을 시도하십시오. 당신이 바라는 것만 큼 고립 된 변화라고 생각합니까? 예상했던대로 비용이 들었습니까? 그리고 중요한 것은 ... 아래쪽면은 무엇입니까? 코드가 기존 저장 프로 시저보다 성능이 떨어지는 경우가 있습니다. 개발 "세금"하나, 런타임 성능 "세금"은 완전히 다른 것입니다.

+0

흥미로운 답변 - 아직은 최고입니다. 세분성은 데이터베이스에서 여러 SP 및 코드 종속성으로 인해 큰 문제입니다. 이 수준에서 격리하는 것은 매우 어려울 것입니다. 그게 바로 내가 걱정하는 것입니다. – flesh

1

저장 프로 시저와 UI의 비즈니스 논리를 별도로 처리하십시오. 그리고 SP의 첫 번째를 취하십시오.

  • 대신
  • 가 쓰기 SP의 호출에 해당 절차를 SUT에서 코드를 리디렉션 그것에서 SP에게
  • 시험 지옥을 호출하는 프로 시저를 작성 : 한 번에 하나의 그 절차에 비즈니스 로직은
  • 는 SP 드롭 (물론의 이 모든 테스트를 통과 계속)

비슷한 방식으로 UI에 접근하십시오. 어느 경우에도 SP와 "일반"코드 간의 매핑이 최고로 불완전한 것처럼 들리지만 아주 간단합니다. 그러나 더 나은 접근법을 알지 못합니다.

나는 이 아닌 단위 테스트를 작성한 다음 리팩터링을 권유합니다. 오히려 오늘 리팩터링 할 코드를 테스트하십시오. 몇 가지 단위 테스트, 약간의 리팩토링; 거품을 내고, 헹구고, 반복하십시오. 언제든지 방해하거나 시작할 때보 다 더 나은 시스템을 유지할 수 있습니다. 변경을 수행하고 결과를 보는 것 사이에는 큰 대기 시간이 없습니다.