Разбирался с тестовым проектом из курса по Android-разработке от e-legion, сам урок -
https://www.youtube.com/watch?v=cH9UxmZwGO4, проект от докладчика (Дмитрий Калита) -
https://github.com/rusmonster/signin.
Структура выглядит подобным образом:
MainActivity.java:public class SignInActivity extends Activity implements SignInModel.Observer {
private SignInModel mSignInModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
mSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
mSignInModel.signIn(userName, password);
}
});
//Восстановление SignInModel
mSignInModel.registerObserver(this);
}
@Override
protected void onDestroy() {
mSignInModel.unregisterObserver(this);
if (isFinishing()) {
mSignInModel.stopSignIn();
}
}
@Override
public void onSignInStarted(final SignInModel signInModel) {
}
@Override
public void onSignInSucceeded(final SignInModel signInModel) {
}
@Override
public void onSignInFailed(final SignInModel signInModel) {
}
}
SignInModel.javapublic class SignInModel {
private final SignInObservable mObservable = new SignInObservable();
public void signIn(final String userName, final String password) {
if (mIsWorking) {
return;
}
mObservable.notifyStarted();
}
public void registerObserver(final Observer observer) {
mObservable.registerObserver(observer);
if (mIsWorking) {
observer.onSignInStarted(this);
}
}
public void unregisterObserver(final Observer observer) {
mObservable.unregisterObserver(observer);
}
private class SignInObservable extends Observable<Observer> {
public void notifyStarted() {
for (final Observer observer : mObservers) {
observer.onSignInStarted(SignInModel.this);
}
}
public void notifySucceeded() {
for (final Observer observer : mObservers) {
observer.onSignInSucceeded(SignInModel.this);
}
}
public void notifyFailed() {
for (final Observer observer : mObservers) {
observer.onSignInFailed(SignInModel.this);
}
}
}
}
Может быть подобная архитектура далеко не лучшая, но проста для понимания, а т.к. опыта у меня немного, решил использовать её (сейчас смотрю в сторону pattern A).
Но возник вопрос - что делать, если таких задач несколько: например, загрузка инфо и загрузка фото в рамках одной Activity.
Можно реализовать несколько моделей для одной Activity, но это будет избыточный код (т.к. по сути они очень схожи), также можно реализовать всё в рамках одной модели, но тогда нужен дополнительный код, чтобы определять какой именно процесс сейчас работает (чтобы в onCreate вызвать соотв. метод, допустим при пересоздании - либо
onLoadPhotoStarted, либо
onLoadInfoStarted и.т.п.), подскажите, пожалуйста - как правильно все это сделать.