2016-08-10 3 views
4

로버트 C. 마틴의 책 "Clean Code"는 을 사용해야한다고 말합니다. 예를 들어, initialize()와 play()의 두 가지 메소드가 있습니다.방법을 작성하는 적절한 방법

initialize()는 play()가 호출되기 전에 호출되어야합니다.

play() 메서드는 내 코드에서 수백 번 호출됩니다.

접근-1 : 나는 세 가지 방법 볼 수 있습니다

전화 초기화() 재생 전에를() 및이 수백 번 이상 반복 될 수있다.

initialize(); 
play(); 

... 

initialize(); 
play(); 

... 

접근법 2 플레이() 메소드 내부

넣어 초기화(). 그러나 이것은 "하나만해라"는 접근에 반대 할 것입니다.

void play() { 
    initialize(); 
    ... 
} 

접근-3 :

내가 initializeAndPlay라는 다른 방법을 써야한다().

void initializeAndPlay() { 
    initialize(); 
    play(); 
} 

더 좋은 방법과 더 깨끗한 방법이 있습니까?

+2

으로 갈 것 클래스를 올바르게 사용하기 위해 재생하기 전에 초기화해야합니다. 1 –

+1

@AndyTurner, true. 이것을 시간 커플 링이라고합니다. :) –

+0

'재생'을 올바르게 수행하려면'초기화 '가 필요합니다. – Blobonat

답변

4

재생이 인 경우 일반적으로 초기화 후 호출되는이 가장 명확하기 때문에 세 번째를 선택합니다.

초기화하지 않고 재생할 수없는 경우 두 번째 것을 선택하십시오.

반면에, 나는 방법을 제공하는 클래스의 디자인에 대해 생각할 것입니다. 대부분의 경우 초기화는 생성자에서 수행됩니다.

+0

메서드를 재생하기 전에 initialize를 호출해야합니다. 그리고 두 번째 것을 사용하면 이것이 깨끗한 방법일까요? 왜냐하면 그것은 하나의 일을하지 않기 때문입니다. 또한 숨겨진 작업을 내부에서 초기화하고 있습니다. – Shahid

+0

프로세스가 여러 단계 (초기화, 재생, 정리 등)로 구성된 경우 이러한 단계를 수행하는 메소드가 있어야합니다. 놀이를하고 비공개로 초기화하면 별도로 호출하지 않아도되므로 세 번째 방법을 사용할 수도 있습니다. 그러나 어쨌든 당신의 구조와 생성자에 초기화를 할 것인지 여부에 대해 생각할 것입니다. –

0

이것은 강력하게 당신이 초기화하는 방법에 의존한다고 생각합니다. 는 현재 객체를 초기화하는 경우, 나는 그것을 옵션 번호 2 가서 보호 것이다 :

void play() { 
if (!initialized) { 
    initialize(); 
} 
... 
} 

을가 전체 시스템/UI를 초기화하는 경우, 클라이언트가 항상 필요로하는 경우 나 옵션 번호 3.

관련 문제