요구사항 확인
- 채팅 방에서 거래 완료 처리를 하면, 게시물의 상태, 채팅방의 상태, 채팅방에서 불러온 게시물의 상태 등 거래 상태 관련 모든 데이터들이 수정되어야 한다.
- 로컬만이 아니라 서버에서도 거래 상태 관련 모든 데이터들이 수정되어야 한다.
문제 확인
- 채팅 방에서 거래 완료를 처리하면서도 다른 화면에서의 데이터들을 모두 수정해야 했기에 Delegate가 추가로 필요했고, viewModel 안에 또 다른 viewModel이 들어가는 등 코드가 복잡해지고 의존성이 심해지는 문제가 발생했다.
원인 추론
- 초기 구상에서 Firebase 읽기 횟수를 줄이고자 특정 모델에서 Post를 불러와 상태를 참조하는 것이 아닌, 모델 자체에 Post의 상태를 각각 넣어줬었다. 그래서 수정할 때 Post의 상태를 가진 모든 모델들을 수정해야했고, 서버 또한 마찬가지였다.
해결 방안
- 우선은 시간이 촉박해서 Delegate나 viewModel을 사용해 일일이 수정했지만 가독성이나 의존성, 코드의 효율 면에서 좋은 코드는 아니었다.
- 아키텍처 혹은 Combine의 필요성을 느끼게 되었고, 후에 refactoring 할 예정이다.