Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces the MLSAppFeature module, which implements an app update checker using the iTunes Search API and local storage for version skipping. The implementation includes a semantic versioning entity, repository patterns, and comprehensive unit tests. Feedback focuses on removing deprecated UserDefaults.synchronize() calls, improving error mapping for decoding failures in the remote service, and cleaning up redundant nonisolated(unsafe) modifiers in classes already marked as @unchecked Sendable.
MLS/MLSAppFeature/Sources/MLSAppFeature/Data/DataSources/Local/UserDefaultsDataSource.swift
Show resolved
Hide resolved
MLS/MLSAppFeature/Sources/MLSAppFeature/Data/DataSources/Local/UserDefaultsDataSource.swift
Show resolved
Hide resolved
MLS/MLSAppFeature/Sources/MLSAppFeature/Data/DataSources/Remote/AppStoreService.swift
Outdated
Show resolved
Hide resolved
MLS/MLSAppFeature/Sources/MLSAppFeature/Data/Repositories/AppStoreRepository.swift
Outdated
Show resolved
Hide resolved
MLS/MLSAppFeature/Sources/MLSAppFeature/Data/Repositories/UpdateSkipRepository.swift
Outdated
Show resolved
Hide resolved
|
고생하셨습니다!! 저희가 분리하는 목적인 DataSource–Repository–UseCase 흐름이 잘 반영되어있고 Domain 중심으로 처리하려는 방향을 보니 계층 간 책임을 명확하게 분리한 것으로 보여서 좋네요!! 이전에도 비슷한 문제를 겪었었는데 저는 항상 레포지토리를 구현하다보면 책임의 범위를 명확하게 정하기 힘들더라구요 ㅠㅠ.. |
@pinocchio22 이미지 캐싱으로 비유하면, UseCase는 URL을 넘기고 이미지를 받으면 그만이고 디스크 캐싱인지 메모리 캐싱인지는 Repository 내부 로직인 것처럼요. 저의 기준을 돌아보면 Domain Layer가 최종적으로 무엇을 필요로 하는가? 였던 것 같아요. |
📌 이슈
✅ 작업 사항
1. 업데이트 체커 기능 구현
2. Clean Architecture 적용
Domain Layer (MLSAppFeatureInterface)
Version: 버전 비교 및 파싱을 담당하는 엔티티UpdateStatus: 업데이트 상태를 나타내는 enum (force/optional/none)AppStoreRepositoryProtocol: 앱스토어 조회 인터페이스UpdateSkipRepositoryProtocol: 스킵 정보 관리 인터페이스Data Layer (MLSAppFeature)
AppStoreService: iTunes Search API를 통한 최신 버전 조회UserDefaultsDataSource: UserDefaults 기반 로컬 저장소AppStoreRepository: 앱스토어 데이터 접근 구현체UpdateSkipRepository: 스킵 정보 저장/조회 구현체Domain Layer (MLSAppFeature)
UpdateCheckerUseCase: 업데이트 판단 및 스킵 로직 처리3. 모듈 구조
4. 테스트 작성 (Swift Testing)
👀 ETC
추후 개발 사항