목적
Domain Layer에서 DTO 등 Data Layer에 있는 클래스를 import하는 것을 수정
상세 계획
비즈니스 로직 구현에 꼭 필요한 것만 domain에 남기도록 의존성 수정
Domain에서 의존성 가지는 것을 금지할 것
- com.eatssu.android.presentation.* (presentation 타입/컴포넌트/모델)
- com.eatssu.android.data.* (DataStore, DTO request/response 등 구현 디테일)
- com.eatssu.android.R (app 리소스 직접 참조)
현재 “잘못된 의존” 목록(확인된 것들)
Presentation 의존
- app/src/main/java/com/eatssu/android/domain/usecase/widget/GetTodayMealUseCase.kt → com.eatssu.android.presentation.widget.WidgetMealList + Timber
app 리소스 의존
- app/src/main/java/com/eatssu/android/domain/usecase/user/ValidateNicknameLocalUseCase.kt → com.eatssu.android.R, UiText.StringResource(...)
Data 타입 의존(도메인이 DTO/로컬스토어를 직접 앎)
- Repository가 DTO request를 직접 받음
- app/src/main/java/com/eatssu/android/domain/repository/UserRepository.kt → ChangeNicknameRequest
- app/src/main/java/com/eatssu/android/domain/repository/OauthRepository.kt → CheckValidTokenRequest
- app/src/main/java/com/eatssu/android/domain/repository/ReportRepository.kt → ReportRequest
- UseCase가 com.eatssu.android.data.local.* 직접 사용(로컬 저장은 구현 디테일)
- 예: LogoutUseCase, SetUserNicknameUseCase, Get/SetAccessTokenUseCase, Get/SetDailyNotificationStatusUseCase, Save/LoadRestaurantByFileKeyUseCase, etc.
최소 리팩토링 실행 계획(“경계 위반만 끊기”)
DTO request를 domain 밖으로 밀어내기(가장 효과 큼, 변경 범위 작음)
- UserRepository.updateUserName(ChangeNicknameRequest) → updateUserName(nickname: String)
- OauthRepository.checkValidToken(CheckValidTokenRequest) → checkValidToken(token: String)
- ReportRepository.reportReview(ReportRequest) → reportReview(reviewId: Long, reportType: String, content: String) (또는 command domain 모델)
- impl(*RepositoryImpl)에서 DTO 생성하도록 이동
목적
상세 계획
Domain에서 의존성 가지는 것을 금지할 것
현재 “잘못된 의존” 목록(확인된 것들)
Presentation 의존
app 리소스 의존
Data 타입 의존(도메인이 DTO/로컬스토어를 직접 앎)
최소 리팩토링 실행 계획(“경계 위반만 끊기”)
DTO request를 domain 밖으로 밀어내기(가장 효과 큼, 변경 범위 작음)