문제

나는 그냥 착수에 최초의 대규모 리팩터링해야 분할(불행하게도 큰)등 두 가지로,그만 통신 인터페이스를 통해.(내 발표자는 컨트롤러와의 요구를 분리한 GUI 로직 응용 프로그램에서 논리).를 사용하여 C#에서 visual studio2008 년---끝---이력서,있는 가장 쉬운 방법은 무엇입니까 이것을 달성하기 위해?

나는 무엇을 하려고은 a)수집된 회원에 대한 새로운 클래스고"추출물 new class" b)정의 결과로 혼란 c)"인터페이스 추출" d)쫓아를 참조하는 클래스고 그들을 변환하는 인터페이스 참조

하지만 내가 결코 이 일을 행하기 전에,그리고는지 궁금해 누구나 알고있는 어떤 좋은 조언이나 문제점을 시작하기 전에 저는 모든 것을 찢 apart...감사합니다!

도움이 되었습니까?

해결책

걸음마.

1 단계 : Resharper의 우수한 리팩토링을 사용하여 작은 변화를 만듭니다.
2 단계 : 코드가 여전히 작동하는지 테스트 (바람직하게는 단위 테스트)
3 단계 : 소스 제어에 커밋

이 세 단계를 여러 번 반복하십시오.

어쩌면 당신이 "한 번에 큰 발걸음이어야한다"는 중 하나를하고 있다면 이것은 효과가 없을 것입니다. 이 경우, 큰 단계로 뛰어 들기 전에 가능한 많은 작은 리팩토링을 수행하십시오.

다른 팁

저를 구식이라고 부르지 만 개인적으로 기술 작업 (예 : 이름 변경 등)에 대해서만 설명한 자동화 된 기능을 사용합니다.

인터페이스 추출 등과 같은 다른 모든 리팩토링의 경우 수동으로 수행하는 것이 좋습니다. 당신은 당신이 할 수있는 더 많은 리팩토링이 있고 일반적으로 코드가 더 깨끗하게 나올 것임을 알게 될 것입니다.

나는 하나의 중요한 조언 만 있습니다. - 당신이 아무 것도 잃지 않고 리팩터를 시작하기 전에 주로 되돌릴 수 있는지 확인하십시오. 그런 다음 다이빙을하고 가십시오. 당신은 결국 멈추고 다시 시작해야 할 수도 있지만, 그것은 내 조언에 귀를 기울인 한 두려워 할 것이 없습니다. 당신은 그것을 많이 배울 것입니다.

짧은 여기에 해답이 첫째,내가 쓸 블로그 포스팅에 대한 덕분에 그것에 대한 아이디어!

그렇다고 가정하자 우리는 이것:

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
    }
  }

제거 발표자는 상속에서 목록으로 수행하는 분할됩니다.지금 당신은 당신을 추출 할 수 있는 인터페이스,자료를 사용 유형을 가능하고 그렇지 않으면 깔끔합니다.

나는 VisualStudio를 사용한 적이 없지만 Eclipse의 자동 리팩토링은 적어도 같은 작업을 수행하는 것만 큼 신뢰할 수 있다고 생각합니다.

당신이하기 전에, 소스 제어에 투자하십시오 : git을 배우십시오. SCM이없는 리팩토링은 눈가리개를 운전하는 것과 같습니다.

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