3

는 일반적으로 말했다 예는 다음과 같습니다일부 상황에서는 안드로이드에서 단단히 결합 된 단편이 괜찮습니까? 활동 통신에 조각을 구현할 때

MyActivity extends Activity implements MyInterface { 
    ... 
    @Override 
    public void myMethod() { 
    // Do something.... 
    } 
    ... 
} 

MyFragment extends Fragment { 
    ... 
    private void aMethod() { 
    ((MyInterface) getActivity()).myMethod(); 
    } 
    ... 
} 

사실은 그 더 자주 내 프로젝트에 조각은 "분할 등 impera에 다른 모듈의 기존 활동을 분해 단순히 사용하지보다 "패션 (아마도 액티비티가 너무 복잡해 졌을 때 리팩토링 중에). 이 단편 중 하나를 다른 활동 (단편을 추출한 활동과 다른 활동)에 첨부하면 의미가 없습니다.

그래서 내 경우에는 내가 일반적으로 끝날 :

MyActivity extends Activity { 
    ... 
    void myMethod() { 
    // Do something.... 
    } 
    ... 
} 

MyFragment extends Fragment { 
    ... 
    private void aMethod() { 
    ((MyActivity) getActivity()).myMethod(); 
    } 
    ... 
} 

그래서되어 지칠대로 지친 질문 : 왜 우리는 조각이 항상 활동을 내부에서만 사용되는 경우 인터페이스를 사용해야합니까? 이 나쁜 습관인가? 이 경우 인터페이스를 사용하면 어떤 이점이 있습니까?

답변

1

조각이 항상 해당 활동 내에서만 사용되는 경우 인터페이스를 사용해야하는 이유는 무엇입니까?

이 경우 인터페이스를 사용할 필요가 없습니다.

이것은 나쁜 습관입니까?

이 경우 사용자에게 적합하지 않습니다.

2

나는 나쁜 습관이라고 생각하지 않습니다. 인터페이스를 사용할 때 무엇을 해결하려고합니까? 다른 활동으로 조각을 사용할 때의 예를 예상합니다. 이것이 일어나지 않는다면 인터페이스는 아무런 이익도없이 단지 복잡성을 더 해줍니다.

다른 장점은 아마도 조각이 활동에서 호출 할 수있는 메소드를 정의하는 것이므로 인터페이스가 잘 정의되어 있습니다. 그러나 그 이점은 논쟁의 여지가 있습니다.

또한 일반적으로 기능별로 활동 및 단편을 하나의 패키지로 그룹화합니다. 따라서이 글을 쓰고 있다면 myMethod 패키지를 private으로 설정할 것입니다. 이는 분명히 인터페이스로 할 수 없습니다. 그래서 어떤면에서는 캡슐화가 향상됩니다.

+0

'myMethod()'는 실제로 내 코드에서 개인 패키지로 사용되었으므로 질문에서 제대로보고하지 않았다. 나는 그것을 편집 할 것이다. –

+0

@MarcoRomano 나는 아직도이 정보를 답으로 남겨 두겠다. 나는 그것을 강조하는 것이 중요하다고 생각한다. 나는 사람들이 때로는 일을 과장하는 것으로 생각한다. 그리고 디커플링은 일반적으로 좋은 습관이라는 것에 동의하지만, 단순한 경우에는 그것을하지 않는 것이 반드시 실수는 아니다. 작동하는 가장 간단한 솔루션이 때로는 최고입니다. – Malcolm