Это плохая практика иметь контекст в параметре конструктора модели MVP? - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь проверить интернет-соединение, используя шаблон MVP.Для этого у меня есть класс MyAppUtil, который принимает Context в своем конструкторе.Это мой класс модели MVP, где я проверяю интернет-соединение, используя MyAppUtil.checkConnection(context):

public class MainActivityInterectorImpl implements MainActivityContract.IInterector{

Context context;

MainActivityInterectorImpl(Context context) {
    this.context = context;
}

@Override
public void getData(OnFinishedListener onFinishedListener) {
    boolean result =  MyAppUtil.checkConnection(context);
    if (result == true) {
        onFinishedListener.onSuccess();
    } else {
        onFinishedListener.onFailure();
    }
}
}

Внутри VIEW я инициализирую докладчика следующим образом:

presenter = new MainActivityPresenterImpl(this, new MainActivityInterectorImpl(this));

Как вывидите, я использую Context внутри модели MVP.Это нормально в схеме MVP?Есть ли лучший подход?

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Interactor может извлекать данные из вашей базы данных, веб-служб или любого другого источника данных. После получения данных интерактор отправит данные докладчику. Таким образом, внесение изменений в ваш пользовательский интерфейс. Вы также можете поместить интерактор в ваш Presenter .

Контекст является частью Android View Layer в MVP, поэтому Presenter не должен иметь об этом никакого представления, и вы не должны передавать его в Presenter или Interactor .

Вы должны добавить необходимые методы в интерфейс View и реализовать его в своих компонентах Android View (например, Activity или Fragment).

1 голос
/ 20 марта 2019

Да, это плохая практика.Сделайте обертку из средства проверки соединения или подобной вещи, а затем передайте ее модели или докладчику.

она должна выглядеть примерно так:

class ConnectionChecker(private val context: Context) {
val isOnline: Boolean
    get() {
        return try {
            val connectivityManager = context.getSystemService(
                    Context.CONNECTIVITY_SERVICE) as ConnectivityManager
            connectivityManager.activeNetworkInfo != null &&
                    connectivityManager.activeNetworkInfo.isConnected
        } catch (exception: Exception) {
            false
        }
    }

}

...