Repository navigation
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
JIRA
📝 작업 내용
📌 요약
🔍 상세
[0] 전체 폴더 구조
★는 이번 PR에서 새로 만들었거나 구성이 바뀐 폴더입니다. 괄호 안 숫자는 폴더 바로 아래의 파일 수입니다.[1] Data 폴더 구조
Firebase/: Repository(Auth, Firestore, Storage), DTO(UserDTO),FirebaseErrorMapperKakao/: Repository(장소 검색, 주변 장소, 역지오코딩), Response,KakaoLocalEndpoint,KakaoCategoryGroupCodeNetwork/Kakao/에 있던 응답 타입과 엔드포인트를 Repository와 같은 폴더로 모았습니다.System/: CoreLocation, ActivityKit, Apple 로그인 등 Apple 프레임워크 기반 구현Mock/: Mock Repository 9개Network/: 공통 네트워크 코드(APIClient,Endpoint,NetworkError,APIKey)만 남김[2] Domain/UseCase 기능별 분리
Appointment(5),Chat(6),Location(2),Place(2),Permission(2),Route(1),Auth(2)FetchSharedPlaces,VotePlace,SharePlace)는 화면이Presentation/Chat/SharedPlace에 있어서Chat에 두었습니다.[3] Core·DI 정리
Core/App/:AppDelegate,SceneDelegateCore/DI/Implementation/ScreenFactory/:ScreenFactory와 확장 12개SupportingFiles/:Info.plist,WhereAreYou.entitlements,WhereAreYouRelease.entitlementsINFOPLIST_FILE,CODE_SIGN_ENTITLEMENTS경로와 Info.plist의 타깃 멤버십 예외 경로를 함께 수정했습니다.Date+Format은 Presentation에서만 쓰여서Presentation/Extension/으로 옮겼습니다.[4] 여러 계층이 직접 사용하는 엔티티 Core/Entity로 이동
Coordinate,Coordinate+Distance,Place,PlaceType,TransportType,AppAsset,AppErrorCoordinateChatContentType·RouteStep필드, Location·NearbyPlace·ReverseGeocoding Repository와 UseCaseCoreLocationRepository, Kakao 응답 매핑PlaceSelectionMapView,LocationPreviewMapView,AppointmentRouteMapView),ChatBubbleBase지도 버튼, PresentationModel 필드(ChatBubbleItem,AppointmentLocation,PlaceInfo,AppointmentRouteParticipant), Coordinator와 ScreenFactory 파라미터PlaceAppointment·SharedPlace필드, 장소 검색·약속 생성·수정·경로 검색 Repository와 UseCaseSearchPlaceCardViewController·PlaceSelectionViewController콜백,RouteSearchViewControllerinit, Coordinator 5곳(Home, Chat, AppointmentList, RouteSearch 등),RouteSearchScreenFactory로 화면 사이에 전달PlaceTypePlace필드KakaoPlaceResponse카테고리 매핑FilterTagBox,SearchPlaceCard필터 UI,PlaceType+표시용 확장TransportTypeUser·RouteStep·RouteProgressSegment필드,SearchRoutesUseCaseUserDTO,ActivityKitRouteLiveActivityRepositoryTransportTypeSelectionBox,RouteSearchViewModel,TransportType+표시용 확장AppAssetAppAssetRepositoryStorageAppAssetRepositoryUIImageView+AppAsset,AppAssetImageLoaderAppErrorDefaultSessionValidationServiceFirebaseErrorMapper,NetworkError,AppleSignInProviderLoginViewController.showLoginError,LoginViewModel,SearchPlaceCardViewModelCoordinate+Distance는PlaceSelectionViewModel의 거리 표시와 Mock Repository에서 쓰고 있어서Coordinate와 함께 옮겼습니다.[5] 삭제
Presentation/ViewController.swift: 프로젝트 생성 시 만들어진 빈 클래스이며, 참조하는 곳이 없습니다.💬 리뷰 노트
엔티티를 Core로 옮기는 기준
"여러 계층에서 사용한다"는 것을 해당 계층이 엔티티를 변환하지 않고 그대로 다루는 경우로 정했습니다.
PresentationModel.init(엔티티:)같은 변환 코드이 기준으로 보면
Appointment,Chat,Route,RouteStep,SharedPlace,User,LocationSharingScope, 권한 상태 2종은 Presentation에서 변환 코드에만 등장해서 Domain에 남겼습니다.ChatContentType과RouteCheckpoint계열은 Domain과 Data에서만 쓰입니다.Core로 옮긴 엔티티끼리만 서로 참조하도록 맞췄습니다. 예를 들어
Place의 필드인Coordinate와PlaceType도 Core에 있어서, Core/Entity에서 Domain을 참조하는 곳은 없습니다.