ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Android architecture - Model
    Android 2020. 2. 21. 15:00
    반응형

    Model이란

    쉽게 말해서 데이터를 모아 두고 관리하는 역할을 한다고 정의할 수 있습니다.

    그러므로 Model을 사용하는 이유는 데이터를 따로 관리하기 위함입니다.

    위에 사진처럼 로컬 데이터를 가져오는 Local, 서버와 통신하여 데이터를 가져오는 Remote

    Local과 Remote의 로직을 관리해주는 Repository를 만들어서 데이터를 관리합니다.

     

    class NaverQueryRemoteDataSourceImpl : NaverQueryRemoteDataSource {
        override fun getNaverMovie(query: String): Single<NaverResponse> =
            NetworkHelper.naverApi.getNaverMovie(query)
    }
    class NaverQueryLocalDataSourceImpl(private val dao: LocalDao) : NaverQueryLocalDataSource {
    
        override fun saveCacheMovie(localEntity: LocalEntity) = dao.insertLocal(localEntity)
    
        override fun loadLocal(): List<LocalEntity> = dao.loadLocal()
    }

    위에 코드는 Remote와 Local의 코드입니다.

    interface로 구조를 만들어 둔 다음 코드를 짠다면 관리하기가 더 용이합니다.

     

    class NaverQueryRepositoryImpl(
        private val remoteDataSource: NaverQueryRemoteDataSource,
        private val localDataSource: NaverQueryLocalDataSource
    ) : NaverQueryRepository {
    
    
        override fun getNaverMovie(query: String): Single<NaverResponse> =
            remoteDataSource.getNaverMovie(query)
                .doOnSuccess {
                    saveCacheMovie(LocalEntity(0, it.items))
                }
    
    
        override fun saveCacheMovie(localEntity: LocalEntity) =
            localDataSource.saveCacheMovie(localEntity)
    
        override fun loadLocal(): List<NaverResponse.Item> =
            mutableListOf<NaverResponse.Item>()
                .apply {
                    localDataSource.loadLocal().map {
                        this.addAll(it.repo)
                    }
                }
    }

    Repository에서는 MVP패턴이면 Presenter MVVM이면 ViewModel, MVC면 Controller, View에게 요청받은 로직을

    실행하여 Local과 Remote에게 로직에 맞게 전달하고 데이터를 받아와 다시 전달해주는 역할을 합니다.

     

    정리를 다시 해보자면

    Local은 디바이스 내에 저장되어 있는 데이터를 가지고 오거나, 디바이스에 저장할 때만 씁니다.

    remote는 서버, 즉 외부 통신으로 데이터를 가지고 올 때만 씁니다.

    Repository는 둘 중에 어느 것을 사용해야 하는지 판단, 데이터를 가공해서 전달 등 매니징을 하는 공간입니다.

     

    각자 역할에 맞게 source를 구현하는 것이 중요합니다.

     

     

    반응형

    'Android' 카테고리의 다른 글

    Alarm Manager  (0) 2020.09.02
    키보드 숨기기  (0) 2020.09.02
    16.[Android] Room정의  (0) 2019.11.15
    15.[Android] Fragment로 대소문자 변환기 만들어보기  (0) 2019.10.14
    14.[Android] activity간 데이터 전달 (계산기)  (0) 2019.10.13

    댓글

Designed by Tistory.