저는 현재 로직과 데이터 액세스가 모두 GUI 클래스에 있는 코드 조각에서 작업하고 있습니다. 당연히 이 상황을 개선하고 싶습니다.
현재 구조는 기본적으로 다음과 같습니다:
궁극적인 목표는 DDD와 같은 구조를 달성하는 것입니다:
그렇다면 문제를 어떻게 해결하시겠습니까?
적도"빅뱅". 그것은 거의 항상 불면에서 당신의 얼굴,since it's high-위험,절망을 측정할 때 다른 모든 것은 실패했습니다.
분할 및 정:이 잘 작동한다면 당신의 세계라는 두 가지 측면입니다. 에서 실제 소프트웨어,당신은 정복하도록 많은 전선 같은 시간에,당신은 거의 여유가 살기에서 검색다.
나've 것을 사용하여 다음과 같"교"에 대한 대부분의 경력:점차적으로 변 나쁜 오래된 코드로 반짝 새 코드입니다. 여기에는 나의 조리법:
시작 어딘가에,그't really matter where. 쓰 몇 가지 장치를 테스트하는 방법을 볼 수 있는 코드는 정말합니다. 얼마나 자주 찾아 그것은 당신이 무슨 생각을 그것이 얼마나 자주지 않't. 사용 IDE 리팩터링하도록 코드를 테스트할 수 있습니다.
후 첫 번째 일을 추측하지've 에서 시작한 장소이 괴물은 떨어져있다. 그렇다면,이동합니다. 하지 않을 경우,을 찾아 새로운 장소와 시작합니다.
의 장점 이 전략은:그것은 작품,그래서 작은 단계의 위험을 유지할 수 있습에서 확인하고 무언가가 끊는 경우,경우에는 코드를've 작업에 마지막 주일입니다.
단점은:그것은 많은 시간을 당신은 느낄 것이 좌절하고 종종 있기 때문에,진전이 느리게 보지"매듭"팝과 갑자기 모든 것을 시작한 장소로 내 마법 같은 일을 직접 경험해 보세요.
'교살자 응용 프로그램'이라는 용어는 처음 들어봤는데 마음에 들었습니다. 가능한 경우 이 방법은 항상 좋은 접근 방식이며, 확실히 위험을 최소화하고 큰 건물을 하나씩 깎아내리는 매우 실용적인 방법입니다.
제 경험상 이 방법이 효과가 없는 경우는 상당히 중요한 변경이 즉시 필요한 경우, 즉 약간의 리팩토링(또는 많은 해킹)이 필요한 변경이 필요한 경우입니다. 이런 상황에서는 제가 해야 할 변경 사항이 큰 진흙탕의 중심에 있고, 표준 유지 관리 또는 사소한 개선 사항으로 변경해야 할 사항도 더러워질 수밖에 없다는 것을 종종 발견했으며, 대규모 리팩터링이 최선의 선택이었습니다.
이러한 경우 저는 분할 정복 방식을 택합니다. 제가 항상 목표로 하는 첫 번째 목표는 테스트 가능성이며, 일단 테스트 가능성이 확보되면 나머지는 훨씬 더 쉬워집니다. 사실 이것이 제가 큰 진흙탕에서 벗어나 리팩토링하는 주요 동인 중 하나이기도 합니다. 이런 종류의 코드는 테스트가 거의 불가능한 경우가 많고, 예제 UI 입력 및 출력이 있기를 바라지만 때로는 그것조차 없는 경우가 많기 때문입니다.
따라서 모든 것이 UI로 뭉뚱그려져 있는 코드를 마주할 때 저는 보통 개별 기능 단위를 클래스와 메서드로 분해한 다음 해당 코드 부분을 도메인이나 서비스 계층으로 푸시하는 것으로 시작합니다. 이렇게 조금씩 작업하면 무언가를 망가뜨릴 가능성이 크게 줄어들고, 문제가 발생했을 때 코드가 망가진 부분을 정확히 찾아내기가 더 쉬워집니다.
모든 변경이 끝날 때마다 사용 가능한 모든 테스트 케이스를 실행하여 기준선을 충족하고 있는지 확인하세요.
좋은 단위 테스트를 작성하다 보면 문제의 규모를 줄일 수 있으며, 괜찮은 단위 테스트 또는 적어도 괜찮은 단위 테스트를 작성할 수 있는 적절한 프레임워크가 있으면 기능의 일부를 점진적으로 대체하는 것이 훨씬 더 실용적이라는 것을 곧 알게 되었습니다.
나는 우연히"도 예외가 되지 않는 방법이"는 것에 대한 약속을 공격하는 문제 이러한 특성이 있습니다.
http://mikadomethod.wordpress.com/
도 있습에 대해 말 미카도는 방법에서는Øredev2010.
http://oredev.org/2010/sessions/large-scale-refactorings-using-the-mikado-method
빅뱅/큰 다시 디자인/재 SW...또는 어떤 다른 이름을 작동하지 않습니다 생계를 위해 SW. 그 이유는 다음과 같습니다
-당신은 여전히 지원하는 데 필요한 기존 SW 과(아마도)동일한 자원을 합니다.
-당신은 아마 없는 요구 사항을 다시 쓰기. 귀하의 오래 된 코드가 모든 요구사항을 포함합니다. 아 엔지니어들이 알고 있는 모든 SW 도메인하고 모든 요구 사항입니다.
-다시 쓰기 시간이 걸릴 것입니다. 의 끝에서 이 시간은 당신이 찾을 수 있는 기존 SW 변경을 지원하는 것이 필요했다 동안 이 시간입니다. 새로운 SW 실제로 분할에서 원본과 병합 필요한 것입니다(는 것도 시간이 걸릴).
나에게는 상황에 따라 달라집니다.
면 그것은 아주 작은 프로젝트 I'd 유혹하는 그냥 그것을 다시 처음부터...그러나 당신이't 종종 이런 사치를 누리고 있습니다.
실패는,나는'd 갈 떨어져서 그것을 수 있습니다. 나는'd 쓰는 단위을 확인하는 테스트는 기존의 기능을 천천히 사용 TDD 을 변환하는 코드로 우아하고 잘 설계된 시스템입니다. 시간에 따라 이 과정은 걸릴 것입니다 그것은 아마 시작처럼 보이 StranglerApplication 당신은 위에서 언급된다.
빅뱅은 매우 위험으로 쉬운 방법이 없습니다 올바른지 여부를 확인하는 업데이트 시스템은 동일한 것으로 오래된 하나입니다.
분할 및 정복보다는 보다 적게 위험 빅뱅...그러나 그것을 경우 큰 충분한 시스템을 수 있는 바람으로 그냥 문제가 있으로 빅뱅.