2017-11-29 21 views
0

는 응용 프로그램 클래스입니다 : 우리 만 Application의 인스턴스가있을 것이라는 점을 보장, 우리는 RxBleClient의 한 인스턴스를 원하는 때문에RxBleClient를 비 정적으로 만드는 점은 무엇입니까? RxAndroidBle 샘플 응용 프로그램에서

, 그것은 간단하게 작성하지
public class SampleApplication extends Application 
    private RxBleClient rxBleClient; 
    /** 
    * In practise you will use some kind of dependency injection pattern. 
    */ 
    public static RxBleClient getRxBleClient(Context context) { 
     SampleApplication application = (SampleApplication) context.getApplicationContext(); 
     return application.rxBleClient; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     rxBleClient = RxBleClient.create(this); 
     RxBleClient.setLogLevel(RxBleLog.DEBUG); 
    } 
} 

:

public class SampleApplication extends Application { 

    private static RxBleClient rxBleClient; 
    public static RxBleClient getRxBleClient() { 
     return rxBleClient; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     rxBleClient = RxBleClient.create(this); 
     RxBleClient.setLogLevel(RxBleLog.DEBUG); 
    } 
} 

더 복잡한 접근 방식의 이점은 무엇입니까? "어떤 종류의 의존성 주입 패턴"이 의미하는 것은 무엇입니까? 예를 볼 수 있을까요? 다시 이점은 무엇입니까?

+0

첫 번째 코드는 두 번째 코드보다 더 테스트 가능합니다 –

+0

왜 코드를 테스트 할 수 있습니까? 어떤 종류의 모의 RxBleClient를 주입하면됩니까? –

+0

예, 종류 –

답변

1

Marcos Vasconcelos가 말했듯이 첫 번째 방법은 테스트하기가 쉽지만 어쨌든 좋은 디자인은 아닙니다.

Dependency injection은 건설 시간에 (모의 된) 의존성을 제공함으로써 (예를 들어) 테스트 할 수있는 테스트 가능한 코드를 얻는 방법입니다.

의존성 주입 예제를 보려면 sources of RxAndroidBle으로 이동하여 클래스가 어떻게 설계되었는지 확인하십시오.

예를 들어 RxBleConnectionImpl class이 삽입 될 수 있습니다. 덕분에 extensive test suite을 만들 수있었습니다.

RxAndroidBle 샘플 응용 프로그램은 이해하기 쉬운 예제로 작성되었습니다. 반드시 따라야하는 것이 항상 쉬운 것은 아니므로 반드시 최상의 패턴을 따르는 것은 아닙니다. 이 샘플의 주요 목표는 라이브러리 API의 사용법을 보여주는 것입니다.