[#191] Storage 객체 구조화 & Data Read 흐름 구축 - #192
Conversation
- 데이터 관리 기능을 총괄하는 Storage 객체 신설 - #191에 작성한 구조에 따라 필요한 인터페이스 구축 - 세부 기능은 구현 전, Fake 객체를 사용하여 흐름만 제어 - MainViewModel에서 Auth 인증 후 Data 불러오는 코드 대폭 수정
|
수정양이 많아지는 것 같아서 이대로 구동되진 않지만 우선 PR을 올립니다 |
| GKLocalPlayer.local.authenticateHandler = { [unowned self] gcViewController, error in | ||
|
|
||
| guard !self.firebaseDidLoad.value else { return } | ||
|
|
There was a problem hiding this comment.
앞서 슬랙으로 여쭤봤던 로드됐는지 체크하는 구문은 여기로 자리를 옮겼습니다.
There was a problem hiding this comment.
메서드명 변경이 필요할 것 같네요 ㅎㅎ 물론 제가 짠 코드지만요 ㅋㅋㅋ
그리고 파이어베이스 데이터 로드 완료 체크를 로그인 메서드에서 하는게 역할 분리 개념적으로 적절할까요? 만약 반드시 여기서 확인하는게 좋다면 firebaseDidLoad 프로퍼티 명을 수정하는 것도 좋은 방법일거 같긴합니다!
There was a problem hiding this comment.
그렇네요ㅎㅎ 이름 변경이 필요할 것 같습니다. dataDidLoad 정도로 변경하면 괜찮을까요?
그리고 데이터 로드 체크 완료는 여기서 하는 것보다, 각 로그인 인증 단계에서 호출하는 데이터 로드 메소드에서 하는 것이 더 적절할 것 같네요!
게다가 추후 Apple Game Center 로그인 관련한 책임만 따로 짊어질 객체를 만들기로 계획했던 것 같아서
그렇게 된다면 더더욱 옮기는 편이 좋아 보입니다
There was a problem hiding this comment.
firebaseDidLoad 부분은 여기서가아닌 데이터 로드 메소드에서 체크한다면 프로퍼티 명 변경은 필요 없을 수도 있을 것 같습니다!
메서드명 변경은 setupAppleGameCenterLogin() 을 말한 거였는데... 생각해보니 적절한 거 같기도 하고 ...
일단 생각하신 방향대로 진행하시면 될 것 같습니다:)
|
구조 변경이 젤 어려운데 수고하셨습니다. |
|
@torch-ray |
|
넵넵 고생하셨습니다! 쉬세요:) |
| let sceneCoordinator: SceneCoordinatorType | ||
| let storage: PersistenceStorageType | ||
| let database: DatabaseManagerType | ||
| let database: FirebaseManagerType |
There was a problem hiding this comment.
기존 DatabaseManager 명을 모두 Firebase로 변경하신 것 같습니다.
저도 매우 좋은 수정방향 같은데, 근데 그렇게되면 database라는 프로퍼티나 파라미터명도 모두 firebase로 수정되는게 좋지않을까? 생각이 들긴합니다.
There was a problem hiding this comment.
넵! firebase로 통일하여 수정하겠습니다
|
|
||
| func load(with uuid: String?, _ isFirstLaunched: Bool) -> Observable<NetworkDTO> { | ||
| Observable<NetworkDTO>.create { [unowned self] observer in | ||
| if isFirstLaunched { |
There was a problem hiding this comment.
isFirstLaunched가 true면 여기서 코어데이터 create호출하고 바로 메서드 종료되어야 하는 거 아닌가요?
There was a problem hiding this comment.
다른 기기에서 로그인 이력이 있다면 확인해야돼서 uuid 체크 후 firebase 데이터 연동이 필요합니다!
| self.backUpCenter = backUpCenter | ||
| } | ||
|
|
||
| func fill(using uuid: String?, isFirstLaunched: Bool) -> Observable<Bool> { |
There was a problem hiding this comment.
fill이 스토리지를 채우다라는 뜻인가요? using uuid 파라미터를 보면 uuid를 활용해서 채운다는 뜻 같은데, 메서드 이름이 조금 더 자세하면 좋겠습니다.
There was a problem hiding this comment.
넵 스토리지를 채운다는 말이 맞긴 한데
조금 더 직관적인 작명 고민해보겠습니다!
- BackUp과 관련한 기능으로 판단
- 기존 PersistenceStorage의 책임을 옮겨 옴
- ViewModel 이니셜라이저 변경 - 새 객체들의 인터페이스 정의 - 임시 메소드 생성
- 각 객체의 저장 기능을 연결지었다
- 빠진 구독 추가
|
이틀차 리팩토링 commit들 올려두었습니다~! 진행하면서 추가적으로 발견한 리팩토링 할 만한 사항들도 공유합니다
protocol StorageType {
// Main
func initializeData(using uuid: String?, isFirstLaunched: Bool) -> Observable<Bool>
// Shop
func availableRewards() -> Observable<[ShopItem]>
func availableMoney() -> Observable<Int> // + Item
func setNewRewardsIfPossible() -> Observable<Bool>
func rewardNeedsToBeGiven(with finishedAd: GADRewardedAd?) -> Int
// Item
func itemList() -> [Unit]
func raiseLevel(of unit: Unit, using money: Int) -> Unit
// Game
func myHighScore() -> Int
// GameOver
func raiseMoney(by amount: Int)
func updateHighScore(new score: Int) -> Bool
// Background
func save()
}
|
|
| } | ||
|
|
||
| firebaseManager.getFirebaseData(uuid) | ||
| firebaseManager.load(uuid) |
There was a problem hiding this comment.
load만 있으니 헷갈리네요. 이럴 경우엔 파라미터 internal, external name을 같이 쓰는게 나을거 같습니다. load(with uuid: String) 이런식으로 한다면, 호출할 때 firebaseManager.load(with: uuid) 이렇게 되고 가독성이 좀 더 나은 느낌입니다.
There was a problem hiding this comment.
매우 동의합니다!
파라미터 네이밍을 통해 이해도를 올려보도록 하겠습니다
| } | ||
|
|
||
| func updateDatabase(_ info: NetworkDTO) { | ||
| func save(_ info: NetworkDTO) { |
There was a problem hiding this comment.
load때와 마찬가지로 파라미터 name을 생략하기 보다 더 적절한 external name을 생각해봐야 할 것 같습니다. 메서드명이 명확한 경우엔 생략이 좋을 수 있는데 , load save는 파라미터 name이 있으면 조금 더 이해가 쉬울 것 같습니다 ㅎㅎ
넵 그런 의미가 맞습니다.
이 부분은 금요일 회의 전까지 수정 해놓겠습니다! |
변경 사항
기타
NetworkDTO타입을 전달하는 것으로 작성이 되어있습니다