@andreyabc

Android как правильно сохранить состояние?

Разбирался с тестовым проектом из курса по 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.java
public 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 и.т.п.), подскажите, пожалуйста - как правильно все это сделать.
  • Вопрос задан
  • 234 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Tiberal
Не стоит в одной модели хранить данные разных сущностей, и нет ничего страшного в использовании нескольких моделей в одной активити. В конце концов у вам может быть сложный ui где каждую вьюху представляет определенная модель данных. Но и дублировать код не стоит, попробуйте проанализировать, что общего у моделей, и как то сгруппировать их посредством наследования или композиции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы