bumdream / morning_study

1 stars 0 forks source link

1. 프로젝트 패턴 공부 - MVVM, MVC #6

Open bumdream opened 6 years ago

bumdream commented 6 years ago

MVVM (Model + View + ViewModel)

image

1. View 에 입력이 들어오면 Command 패턴으로 ViewModel에게 명령.
2. ViewModel 은 필요한 데이터를 Model 에 요청
3. Model은 ViewModel에 필요한 데이터를 응답
4. ViewModel 은 응답 받은 데이터를 가공하여 저장
5. View 는 VIewModel 과의 Data Biding을 통해 자동 갱신

안드로이드에서의 ViewModel

image

ViewModel 적용 사례 - 안드로이드 TodoList 어플리케이션

1. ViewModel 클래스 만들기 (MainViewModel.java)

public class MainViewModel extends AndroidViewModel {
    private LiveData<List<TaskEntry>> tasks;
    public MainViewModel(@NonNull Application application) {
        super(application);
        AppDatabase database = AppDatabase.getInstance(this.getApplication());
        tasks = database.taskDao().loadAllTask();
    }

    public LiveData<List<TaskEntry>> getTasks(){
        return tasks;
    }
}

2. onCreate() 에서 다음 메소드 실행

    private void setupViewModel() {
        MainViewModel viewModel = ViewModelProviders.of(this).get(MainViewModel.class);
        viewModel.getTasks().observe(MainActivity.this, new Observer<List<TaskEntry>>() {
            @Override
            public void onChanged(@Nullable List<TaskEntry> taskEntries) {
                Log.d(TAG, "Updating list of tasks from LiveData in ViewModel.");
                mAdapter.setTasks(taskEntries);
            }
        });
    }

참고 : 유다시티 ViewModel 강좌 부분

hongsukchoi commented 6 years ago

MVC

2018-08-02 9 59 19

  1. Controller로 사용자의 입력이 들어옵니다.
  2. Controller는 Model을 데이터 업데이트 및 불러오고
  3. Model은 해당 데이터를 보여줄 View를 선택해서 화면에 보여주게 됩니다.

예시로 뭐가 있는 지 잘 모르겠지만, 내 프로젝트에서 ~AR 관련 이미지 정보를 담고 있는게 이미 Vuforia에서 제공하는 State 클래스임을 감안하면~ ~MVC는 일단 제외~ State 객체가 모델이고, View의 Renderer와 State 객체가 직접 요청을 주고 받으니 MVC인 것 같기도 하다.

비교적 내 프로젝트 앱의 구조가 간단하고, 사용자가 앱(AR카메라)를 키는 순간 이후부터 사용자로부터 별다른 입력없이 고속으로 들어오는 카메라 프레임 입력을 체크하는 거니까 MVP나 MVVM 패턴처럼 미들맨을 넣을 필요가 없을 것 같다.

고속으로 들어오는 카메라 프레임 이미지를 고속으로 렌더하면서, 동시에 고속으로 들어오는 카메라 프레임 이미지를 체크하는 중간 클래스가 필요할까 하는 의미.

MVP

2018-08-02 10 01 25

  1. View로 사용자의 입력이 들어옵니다.
  2. View는 Presenter에 작업 요청을 합니다.
  3. Presenter에서 필요한 데이터를 Model에 요청 합니다.
  4. Model은 Presenter에 필요한 데이터를 응답 합니다.
  5. Presenter는 View에 데이터를 응답 합니다.
  6. View는 Presenter로부터 받은 데이터로 화면에 보여주게 됩니다.

내 프로젝트에서 View로 들어오는 사용자 입력:

~View로 들어오는 사용자의 입력은 두 타입이 있다~

Presenter 와 Model 간 요청이 필요한 경우:

Presenter -> View 요청:

[출처: 마기, buzzvil]

MVVM

DataBinding을 어떻게 하는 지 잘 이해가 안간다. Angular와 같이 간단하려나