ViewModel

앱 아키텍처테스트 및 유지 보수 측면에서 장점이 있으며 이를 위한 라이브러리 및 구성 요소를 제공합니다.

유지 관리, 테스트, 앱 확장성(여러 사람과 함께 작업할 때에도 코드 충돌 최소화)

UI 레이어 : 사용자 인터랙션(클릭 시 UI에 데이터 업데이트) 또는 외부 입력(네트워크 응답)으로 인해 데이터가 변경되는 경우 –> 변경 사항으로 UI 업데이트

UI 레이어구성 방법은 Compose 또는 ViewModel 클래스입니다.

UI = UI 요소 + UI 상태(일반적으로 ViewModel의 인스턴스로 구현되는 작업에 필요한 논리를 포함하는 클래스입니다.)


ViewModel은 UI에서 사용할 상태를 포함하고 제공합니다.

UI 상태는 ViewModel에서 변환된 애플리케이션 데이터입니다.

ViewModel은 사용자 작업 및 상태 업데이트를 처리합니다.

업데이트된 상태는 렌더링할 UI에 다시 보고됩니다.


상태를 변경하는 이벤트 논리(기사를 북마크하기 위한 사용자 요청)

생성된 새 UI 상태는 UI에 표시되어야 하지만 ViewModel에서 수동으로 데이터를 가져오지 않고 자동으로 반응할 수 있어야 합니다. 생의 날짜 소지자에게 UI 상태를 보여주어야 합니다.

ViewModel에서 발생하는 UI 작업은 항상 UI 상태 업데이트로 이어져야 합니다.

데이터 계층: 비즈니스 로직(앱 데이터가 생성, 저장 및 수정되는 방식을 결정하는 규칙으로 구성됨)

앱에서 처리하는 데이터 유형별로 리파지토리 클래스를 생성해야 합니다(영화 데이터 클래스: MoviesRepository, 결제 관련 클래스는 PaymentsRepository).

-뷰모델-

ViewModel을 확장하는 클래스를 만듭니다.

(Method를 HomeFragment에서 뷰 모델로 옮기고 싶습니다.)


뷰 모델에서는 LiveData와 MutableLivedata를 섞어서 변수의 불변성을 높였습니다.

–> 외부 환경에 영향을 받지 않도록 뷰 모델 내부 비공개로 변경 가능 태도. 생의 날짜로 설정된 변수는 외부에서 변경할 수 없습니다. 관찰하다모니터링만 활성화하십시오.


뷰 모델의 Fetch 메서드는 또한 데이터를 MutableLiveData에 삽입합니다.> 변수_항목.

-HomeFragment-

@AndroidEntryPoint
class HomeFragment : Fragment() {
    lateinit var binding: ActivityHomeFragmentBinding
    private lateinit var adapter: HomeAdapter

    private val viewModel : HomeViewModel by viewModels()

    @Inject
  lateinit var service : RetrofitInterface

HomeFragment에서 뷰 모델 객체를 생성합니다.

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    initView()
    viewModel.fetch()
    viewModel.fetch2()
    viewModel.fetchUpcomming()
   

    viewModel.items.observe(viewLifecycleOwner) { items ->
        adapter.submitList(items)
    }
}

뷰 모델에 있는 항목의 라이브 데이터가 관찰되고 변경이 발생하면 submetList 메서드가 실행되어 데이터를 보내고 리사이클러 뷰를 업데이트합니다.