2013-02-14 2 views
18

하나님 객체를 리팩터링하는 가장 좋은 방법을 아는 사람이 있습니까?당신은 어떻게 하나님 계급을 리팩터링합니까?

높은 결합 방법이 있기 때문에 더 작은 수의 클래스로 나누는 것만 큼 간단하지 않습니다. 내가 하나의 방법을 끄집어 내면 나는 다른 모든 방법을 꺼내게된다.

+2

이것은 대답하기가 다소 불가능한 것처럼 보입니다. – jahroy

답변

30

Jenga와 같습니다. 인내와 안정된 손이 필요합니다. 그렇지 않으면 처음부터 모든 것을 다시 만들어야합니다. 어느 것이 나쁘지는 않습니다. 때때로 코드를 버려야합니다.

다른 조언 : 어떤 데이터에이 방법이 작동 않습니다

  • 이 방법을 철수하기 전에 생각 하는가? 그 책임은 무엇입니까?
  • 처음에는 god 클래스의 인터페이스를 유지하고 새 추출 된 클래스에 호출을 위임하려고합니다. 결국 신 계급은 자신의 논리가없는 순수한 정면이어야합니다. 그럼 당신은 편의를 위해 보관하거나 멀리 던져 새로운 클래스에만
  • 단위 테스트 도움말 사용하기 시작 : 당신은 내가 가정 기능을
+0

단위 테스트에 대한 좋은 조언. 그러나 나는 정말 방법을 엉망으로 만드는 방법이 정말로 필요합니다. 문제의 핵심은 케이스에 크게 좌우되는 –

+0

입니다. 불행하게도 ("적절한 리팩토링 패턴을 사용하십시오 (http://www.refactoring.com/catalog/index.html)"제외) 모든 조리법은 없습니다. –

+2

나는 그것을 외관으로 바꾸는 아이디어를 좋아합니다. 이렇게하면 Jenga 조각을 서로 유지하는 데 도움이되지만 리팩토링을 계속 진행시킬 수 있습니다. –

11

을 아프게하지 않는 보장을 추출하기 전에 각 방법에 대한 테스트를 작성을 "God Object"는 거대한 클래스 (코드 줄 단위로 측정 됨)를 의미합니다.

기본 개념은 그 기능의 일부를 다른 클래스로 추출하는 것입니다. 자주 함께 익숙해

  • 필드/매개 변수를 찾을 수있는 사람들을 찾기 위해

    . 클래스의 일부 하위 집합 만 사용하는 새 메서드 (

  • )의 일부 하위 집합 만 사용하면 해당 필드 만 포함하는 클래스로 이동할 수 있습니다.

  • 기본 유형 (int, String, boolean). 그들은 종종 자신의 나오는 전에 진짜 가치 개체입니다. 일단 가치 객체이면, 그들은 종종 방법을 끌어 들인다.

  • 신 개체의 사용법을 살펴보십시오. 다른 클라이언트가 사용하는 다른 방법이 있습니까? 그것들은 별도의 인터페이스로 갈 수도 있습니다. 이러한 인터페이스에는 차례로 별도의 구현이있을 수 있습니다.

    • 테스트 : :

    실제로 이러한 변경 작업을 수행하는 당신은 당신의 명령에 일부 인프라와 도구가 있어야 자주 실행할 수있는 준비가 테스트 (아마도 생성) 완전한 세트를 가지고. 테스트를하지 않고 변경하는 경우 매우주의하십시오. 나는 그것들을 하나의 IDE 액션으로 완전히 할 수있는 추출 메소드 같은 것으로 제한한다.

  • 버전 제어 : 버전 제어 : 실제로 2 분마다 커밋 할 수있는 버전 컨트롤이 필요합니다. SVN은 실제로 작동하지 않습니다. 힘내세요.

  • 미카도 방법 : 미카도 방법의 아이디어는 변화를 시도하는 것입니다. 잘 작동한다면.깨지는 내용을 메모하지 않으면 시작한 변경 사항에 종속성으로 추가하십시오. 롤백하면 변경됩니다. 결과 그래프에서 종속성이없는 노드로 프로세스를 반복하십시오. 전에 http://mikadomethod.wordpress.com/book/

0

시작 : 가 어떻게 하나님 클래스는 나쁜 알고 계십니까?

또는 적어도 신의 계급을 측정하는 방법은 무엇입니까?

좋은 - 큰 - 클래스와 나쁜 - 신 - 클래스의 경계와 차이점을 찾으십시오.

예 : 몇 가지 추가 도우미, 속성 및 내장 된 유틸리티 메소드가있는 클래스는 앞으로 God 클래스의 후보가 될 수 있지만 아주 좋은 코드 일 수도 있습니다.

나는 하나님 클래스가 잊혀지거나 연기 된 리팩토링을 가진 커다란 클래스 몸체이지만 그 리팩토링이 시간이 지날수록 커지는 이유가 있다고 생각한다.

  • 분할 클래스 :

    • 상속 및 유지 mixin,
    • 대표 (파일, 외부 클래스, API/외관 유틸하는 예 :) : 여기

      일반 조언의 사용이다 추가 서브 클래스 또는

    • 가 고체처럼 좋은 패턴을 사용하여 관련 클래스, 자신을 리팩토링의 예술을 개발
    • ,