2008-10-23 4 views
1

저는 처음으로 대규모 리팩터링을 시작했으며 (불행히도 커다란) 클래스를 두 개로 분리해야 인터페이스를 통해서만 통신 할 수 있습니다. (내 발표자가 컨트롤러로 밝혀졌으며 GUI 로직을 App 로직에서 분리해야 함). VisualStudio 2008 및 Resharper에서 C#을 사용하여 가장 쉬운 방법은 무엇입니까?리팩토링하는 방법 : 인터페이스를 통해 통신하는 클래스 두 개로 나누십시오.

내가하려고 하겠어 것은 는) 새로운 클래스의 멤버를 수집하고 B "새 클래스를 추출")) D를 "인터페이스의 압축을 풉니 다"에 대한 참조를 쫓아) 결과 엉망 C를 정리하다 클래스를 변환하고 인터페이스 참조로 변환

하지만 전에 한 번도 해 본 적이 없으며 모든 것을 찢어 내기 시작하기 전에 누구에게도 유용한 팁이나 잡화가 있는지 궁금합니다. 감사합니다!

답변

3

아기 단계.

1 단계 : Resharper의 우수한 리팩터링을 사용하여 약간의 변경을하십시오.
2 단계 :

반복이 3 단계를 여러 번 소스 제어 커밋 테스트 (바람직 단위 테스트) 코드를 보장하기는 여전히
3 단계가 작동한다.

"한 번에 큰 단계가되어야합니다"리팩토링 중 하나를 수행하는 경우이 기능이 작동하지 않을 수도 있습니다. 이 경우 큰 단계로 들어가기 전에 가능한 한 많은 리펙토링을 수행하십시오. 추출 인터페이스 등과 같은 다른 모든 리팩토링을 위해 (... 등등 이름 변경 등)

5

오래 된 패션 전화 해하지만, 개인적으로, 나는 그것이 기술적 인 작업의 경우에만 설명 자동화 기능을 사용 , 나는 수동으로하는 것을 선호한다. 당신은 당신이 할 수있는 더 많은 리팩토링이 있다는 것을 알게 될 것이고 보통 코드는 더 깨끗해질 것입니다.

+0

JetBrains의 우수한 도구를 사용하지 않는 한! –

0

짧은 답변은 여기에서 먼저 블로그 게시물을 작성하려고합니다. 아이디어를 제공해 주셔서 감사합니다! 우리가 직접 회원을 변환 할 필요가 간접적으로 용도, 즉 필드로 자격을

class PresenterAndController 
    { 
    public void Control() 
    { 
     Present(); 
    } 

    public void Present() 
    { 
     // present something 
    } 
    } 

첫째 :

자, 가정하자 우리는이 있습니다. 이렇게하려면 사용 추출물 슈퍼 클래스 리팩토링은 슈퍼 클래스에 발표자 부분을 추출 :

internal class Presenter 
    { 
    public void Present() 
    { 
     // present something 
    } 
    } 

    class PresenterAndController : Presenter 
    { 
    public void Control() 
    { 
     Present(); 
    } 
    } 

한을 위임 될 PresenterAndController에 필드를 만들고 (Alt-INS)에 위임 멤버를 만들 생성 사용합니다. 그들은 동일하기 때문에, 기본 방법을 숨길 발생합니다 : 상속 목록에서

internal class Presenter 
    { 
    public void Present() 
    { 
     // present something 
    } 
    } 

    class PresenterAndController : Presenter 
    { 
    private Presenter myPresenter; 

    public void Present() // hides base method 
    { 
     myPresenter.Present(); 
    } 

    public void Control() 
    { 
     Present(); // it now references method from this type 
    } 
    } 

제거 발표자 당신은 분할 클래스로 수행됩니다. 이제 인터페이스를 추출하고 가능하면 기본 유형을 사용하고 그렇지 않으면 정리할 수 있습니다.

0

필자는 VisualStudio를 한번도 사용해 보지 못했지만 이클립스의 자동 리팩터링은 꽤 안정적이라고 생각한다. 적어도 동일한 작업을 수행하는 것만 큼 안정적이다.

1

오직 하나의 중요한 충고 만 있습니다. 당신이 아무것도 잃지 않고 리팩터를 시작하기 전의 상태로 되돌릴 수 있는지 반드시 확인하십시오.그럼 그냥 잠수와 그것을 위해 가자. 당신은 잘 멈추고 다시 시작해야 할 수도 있지만, 두려워 할 것이 없습니다. (조언 한 점에 유의하는 한). 당신은 그것을 많이 배우게됩니다.

0

전에 소스 제어에 투자하십시오. Git을 배워보십시오. SCM없는 리팩터링은 눈을 가린 운전과 같습니다.

관련 문제