요즘 MVVM 패턴을 배워가면서 가장 많이 하는 질문이
“이 코드가 여기 있어야될 이유가 있을까?” 라는 질문이다. 그 질문에서 파생되었던 것이
바로 MVVM에 있는 서버통신 코드였다.
@objc func editCompleteButtonDidTap(){
viewModel.patchPetProfile()
}
protocol MyEditNetworkHandlerProtocol {
func patchMyPetProfile()
}
extension MyEditProfileViewModel: MyEditNetworkHandlerProtocol {
func patchMyPetProfile() {
MyAPI.shared.patchMyProfile(requset: editProfileDataOutput.value) { result in
switch result {
case .success(_):
self.editCompletedOutput.value = true
NotificationCenter.default.post(name: .homeVCUpdate, object: nil)
NotificationCenter.default.post(name: .myPageUpdate, object: nil)
default:
self.editCompletedOutput.value = false
}
}
}
}
아직 텍스트로 완전히 설명할만큼 개념이 박혀있지 않아서 모호하게 내가 느낀건
“뷰모델에서 서버통신 로직이 통째로 들어가있는게 좋은 구조인가?” 라는 의문이었다.
즉 viewModel안에서도 서버통신을 따로 다루면 훨씬 더 좋지 않을까?가 내 결론이었다
그렇게 장석우그는감히섹시개발자라할수있다 님께 여쭤보게되었고 Repository 패턴에 대해 알게 되었다,
디자인 패턴으로 데이터의 추상화를 제공하여 어플리케이션이 추상화된 인터페이스로 작업할 수 있게해준다.
여기서 가장 핵심이 되는 단어가 바로 데이터!
즉 데이터를 받아오고 가져오는 과정을 비즈니스 로직과 분리하는거라고 볼 수 있다.
정말 아래 설명이 딱 맞는 표현인거 같다!
<aside> 💡 Repository는 데이터 소스에 접근하기 위해 캡슐화된 구성요소입니다. 데이터에 접근하는 기능을 한군데에 집중시켜서, 유지보수에 용이하고, 데이터 구조에 대한 의존성 낮추게 됩니다. 이로써 앱이 데이터를 다루는 곳과 이 데이터를 표현하는 곳으로 명확하게 나뉘게 되는 것입니다.
</aside>
장점으로
라는 것들이 있습니다!