하는 방법 리팩터링:분할 등으로 두 가지를 통해 통신하는 인터페이스
-
04-07-2019 - |
문제
나는 그냥 착수에 최초의 대규모 리팩터링해야 분할(불행하게도 큰)등 두 가지로,그만 통신 인터페이스를 통해.(내 발표자는 컨트롤러와의 요구를 분리한 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이없는 리팩토링은 눈가리개를 운전하는 것과 같습니다.