arquitectura MVVM en Android con voleo

EndiveDeCyrodiil:

Estoy estudiando el MVVM para ver si me puede ayudar para mis próximos proyectos. Lo que entiendo hasta ahora, es que necesito utilizar un modelo de vista para la celebración de mis datas más de interfaz de usuario. También tengo que utilizar una clase de repositorio para realizar todas mis solicitudes de servicios web, y estoy usando la Biblioteca del voleo.

Así que aquí está lo que hice:

el modelo de vista

public class MyViewModel extends ViewModel {

    private MyRepository repository;
    private MutableLiveData<MyPojo> pojo;

    public MyViewModel(MyRepository repository) {
        this.repository = repository;
        this.pojo = new MutableLiveData<>();
    }

    public LiveData<MyPojo> updatePojo(){
        pojo.postValue(repository.getPojo());
        return pojo;
    }
}

La clase Repositorio

public class MyRepository {

private Application application;
private LiveData<MyPojo> pojo;

public MyRepository(Application application) {
    this.application = application;
}

public MyPojo getPojo(){
    if(pojo == null){
        ApiRequest apiRequest = new ApiRequest(ApiSingleton.getInstance(application).getRequestQueue(), application);
        apiRequest.apiGetRequest(ApiRequest.MY_ENDPOINT, null, new ApiRequest.apiCallback() {
            @Override
            public void onSuccess(Context context, JSONObject jsonObject) {
                pojo = ApiResponseParser.parse(jsonObject, MyPojo.class);
            }

            @Override
            public void onError(Context context, String message) {

            }
        });
    }
    return pojo;
}

}

Se especifica aquí que un modelo de vista nunca se debe hacer referencia a una vista, ciclo de vida, o de cualquier clase que puede contener una referencia al contexto de la actividad. Como se puede ver, hay que utilizar un contexto con el fin de realizar una petición de Volley en mi clase de repositorio, y mi modelo de vista tiene una referencia en esta clase.

Me estoy perdiendo algo en mi diseño? Es voleo no es compatible en esta lista?

Beto :

En lugar de pasar la Applicationde sus de MyRepository constructory creando ApiRequest, puede pasar el ApiRequestque MyRepository de constructor.

public MyRepository(ApiRequest apiRequest) {
    this.apiRequest = apiRequest;
}

Ahora el MyRepositorytiene ninguna referencia a Context.

Y, en cuanto a ViewModeltener una referencia directa a MyRepository, que puede hacer la inversión de la dependencia :

Crear una interface, por ejemplo, MyDataStorecon el método getPojo(). MyRepositoryejecutará este interface. Si bien la creación MyViewModel, se pasa a la MyRepositoryde ella, pero MyViewModelsólo tendrá referencia a MyDataStore.

interface MyDataStore {
   ... getPojo()
}

public class MyRepository implements MyDataStore {
   ...
}

public MyViewModel(MyDataStore dataStore) {
        this.dataStore = dataStore;
        this.pojo = new MutableLiveData<>();
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=364144&siteId=1
Recomendado
Clasificación