"레거시 코드로 효과적으로 작업하기"가 VB6에서 VB.NET으로 포팅된 응용 프로그램으로 작업하는 데 도움이 됩니까?

StackOverflow https://stackoverflow.com/questions/1029483

문제

원래 작성된 대규모 레거시 애플리케이션을 리팩토링하고 싶습니다. 비주얼 베이직 6.0 이후 .NET으로 포팅되었습니다.자신있게 이 작업을 수행하기 위해 기존 코드를 중심으로 단위 테스트를 수행하여 이전과 이후를 비교할 수 있기를 원합니다.이를 수행하는 가장 쉽고 효과적인 방법은 무엇입니까?

"라는 책이 있어요.레거시 코드를 효과적으로 사용하기"그렇다면 나에게 도움이 될 것 같습니다.그러나 개체 지향 언어만 다루는 것처럼 보이며 Visual Basic 6.0이 반드시 OO는 아닙니다.이 책이 아직도 나에게 도움이 될 수 있을까?이 글을 읽어본 사람이 보증할 수 있기를 바랍니다.

특히 이 애플리케이션은 양식 자체 외에는 클래스를 사용하지 않습니다.일관되지 않고 양식에서 직접 데이터베이스에 액세스합니다.이 프로젝트에는 어떤 표준도 없이 자신만의 스타일을 사용하여 작업하는 여러 사람이 있었습니다.

내가 말했듯이 이 프로젝트는 VB.NET으로 포팅되었습니다.그러나 Visual Studio 2008에서 컴파일된다는 점에서만 이식되었습니다.모든 코딩 개념은 Visual Basic 6.0입니다.

도움이 되었습니까?

해결책

단순히 다루는 것이 아니다 객체지향 (OO) 언어.큰 섹션은 C에서 레거시 코드를 처리하는 방법에 관한 것입니다.

그렇죠, 사세요!


다음과 같은 전체 장(19장)이 있습니다.

내 프로젝트는 객체 지향적이지 않습니다.안전하게 변경하려면 어떻게 해야 하나요?

또한 있다 vbUnit, x단위 사용하는 데 도움이 될 수 있는 구현 TDD ~와 함께 비주얼 베이직 6.0.

사실 저는 질문을 잘못 읽었고 당신이 그렇다고 생각했습니다. 가고 있다 이미 포팅한 것은 아닙니다.이 경우, 당신은 엄청난 양의 '레거시'를 갖게 됩니다. VB.NET 이 책이 당신을 위한 책이라는 코드입니다.VB.NET의 OO 기능을 활용하고 책의 나머지 부분을 활용할 수 있습니다.

나는 이 책을 더 이상 추천할 수 없다.

다른 팁

예;이 책의 개념은 훌륭하고 강력하며 OOP를 넘어 확장됩니다.그리고 VB6 될 수 있다 비록 일부 언어만큼 철저하게 객체 지향적이지는 않지만 객체 지향적입니다.

이 책에서 가장 강력한 개념 중에는 "이음매"라는 개념이 있습니다. 이는 본질적으로 코드를 분할하고 테스트를 삽입하거나 기능을 분리 또는 추상화할 수 있는 장소입니다.이는 절차적 코드에도 적용되는 개념 중 하나일 뿐입니다.

질문을 더 구체적으로 만들고 싶을 수도 있습니다.

VB6은 그 자체로 순수한 OO 언어는 아니지만 친숙할 만큼 OO의 요소가 충분합니다.또한 VB6 IDE용 단위 테스트 플러그인도 많이 있습니다.

하지만 상위 수준의 VB6 구성 요소 중 일부를 고려해 보겠습니다.

  • 양식은 개체입니다(새 인스턴스를 만들 수 있음).
  • 모듈은 정적 메서드만 있는 클래스처럼 동작합니다.
  • 클래스 및 UserControl은 얻을 수 있는 객체에 가장 가깝습니다.생성자가 없기 때문에 상황이 어려워지지만 원래 개발자가 초기화를 유지하거나 일관된 Init 하위 항목을 작성했으면 좋겠습니다.
  • VB의 이벤트는 이상합니다.그것은 또한 아마도 당신을 가장 많이 놀라게 할 것입니다.이벤트의 특정 순서에 따라 달라지는 숨겨진 상태 저장 코드는 의심할 바 없이 여기저기 흩어져 있습니다.
  • 속성 페이지.글쎄, 그게 바로 그거야.

VB의 모범 사례부터 시작해 보세요.모범 사례 코드를 염두에 두고 앱을 작성하지 않았다면 해당 단계를 수행하면 향후 많은 문제를 줄일 수 있다고 생각합니다.

분명히 해야 할 일이 몇 가지 있지만 .NET 작업을 수행하기 전에 고려해야 할 전략은 다음과 같습니다.

가능한 한 많은 기본 FORM 코드를 클래스로 이동하세요.시작으로 양식당 하나의 클래스 파일입니다.본질적으로 양식 이벤트 핸들러는 기본 클래스 인스턴스의 메소드에 대한 프록시 호출만 수행해야 합니다.모든 사용자 정의 메소드는 분명히 클래스 파일로 이동할 수 있습니다.

.NET 마이그레이션을 준비하는 데 도움이 되는 Microsoft 및 기타 업체의 모범 사례 가이드(등)를 읽은 후에는 기본적으로 다시 코딩/리팩터링해야 할 약간의 지옥에 대한 준비가 된 것입니다.오류 처리, 이벤트 순서 지정, 런타임에 바인딩된 개체/변형, 컬렉션 등과 같은 성가신 문제

오류 처리 코드에 대한 한마디:그것은이다 특히 스파게티 오류 발생 시 복제하기가 어렵습니다. 특히 일반적인 Visual Basic 코더는 스파게티를 제어 흐름 논리로 사용하는 데 능숙하지 않기 때문입니다.루틴에 2개 이상이 있는 경우 각 On Error 블록을 별도의 하위 루틴으로 분리하는 것이 거의 가치가 있습니다.

코드가 정리되면 Visual Basic 코드를 합리적인 추상화(예: 단일 데이터 어댑터 클래스 및 연결 등)로 리팩터링하는 것을 고려할 수도 있지만 이에 대한 최선의 판단은 귀하에게 있습니다.

이 접근 방식이 마음에 들지 않을 수 있으므로 한 가지 형태로 확실히 테스트해 보세요.

나는 C/C++ 프로젝트를 통제하기 위해 구입한 복사본을 소유하고 있습니다.기능을 놓쳤기 때문에 C#/.그물 제공해야 합니다.

책은 매우 C/C++적이지만 John이 말했듯이 객체 없이 작업하는 장이 있습니다.

그러나 말씀하신 대로 코드가 .NET으로 포팅되면 더 이상 Visual Basic 6.0 코드가 아닙니다..NET에는 코드에 연결하고 테스트할 수 있는 다양한 Visual Basic/C# 방법이 있습니다.하지만 이 책은 애플리케이션에 연결할 수 있는 다양한 방법과 대규모의 오래된 프로젝트를 제어하기 위한 전략에 대한 좋은 개요를 제공할 것입니다.

마틴 파울러(Martin Fowler)의 글을 살펴보는 것이 좋습니다. 리팩토링:기존 코드의 디자인 개선, 꼭 읽어야 할 훌륭한 책입니다.

당신은 다음과 같은 내용을 찾고 있을 수도 있습니다. Visual Basic의 전문적인 리팩토링.읽어보진 않았지만 적용 가능한 것 같습니다.

나는 특성화 테스트가 가장 큰 이점을 발견할 것이라고 생각합니다.자동화되어야 합니다.특성화 테스트가 없으면 애플리케이션/코드를 실제로 실행하여 수동으로 테스트해야 합니다.새 코드를 추가할 때 중요한 기능 테스트를 놓치기 쉽습니다.이것은 내 경험에서 나온 것입니다.

새로운 코드를 추가할 때 Sprout 메서드와 Sprout 클래스가 중요합니다.

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