-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[기록] 목적에 따른 데이터 구조 분리와 매핑 #4
Comments
ReferenceClean Architecture with mvvm
dto와 Entity의 분리 |
기존 상황기존에는 빠르게 결과물을 도출하여 좋은 성적을 받자는 생각 아래에 간편하고, 지금 당장 쉬운 코드를 작성해왔다. @FetchRequest(
sortDescriptors: [], predicate: NSPredicate(format:"readingStatus == true"),
animation: .default)
private var items: FetchedResults<BookInfoEntity> 이는 아래와 같은 장점이 있었다.
문제점프로젝트 종료 후 개선을 위해 CoreData Entity의 Attribute 이름을 바꾸고 추가, 삭제 하는 과정에서 문제가 생겼다. 정리하자면 아래와 같은 문제점이 있었다.
해결 방법이를 해결하기 위해 자료를 찾으며 SwiftUI mvvm Clean architecture 글과 Spring에서 DTO 관련 글들을 볼 수 있었다. (Spring은 모르겠다..) extension MoviesResponseEntity {
func toDTO() -> MoviesResponseDTO {
return .init(
page: Int(page),
totalPages: Int(totalPages),
movies: movies?.allObjects.map { ($0 as! MovieResponseEntity).toDTO() } ?? []
)
}
} 이를 바탕으로 아래와 같이 코드를 작성했다 //MARK: DB Entity -> Domain
extension BookInfoEntity {
func toDomain() -> BookInfo {
return .init(
id: Int(id),
author: author ?? "",
bookDescription: bookDescription ?? "",
coverImageUrl: "",
image: UIImage(data: image ?? Data()),
isbn: isbn,
link: link ?? "",
readingStatus: readingStatus,
repeatTime: Int(repeatTime),
page: Int(page),
publisher: publisher ?? "",
title: title ?? "제목 없음",
wish: wish,
notes: bookNotes?.allObjects.map { ($0 as! BookNoteEntity).toDomain() } ?? [],
trackings: readingTrackings?.allObjects.map { ($0 as! ReadingTrackingEntity).toDomain() } ?? [],
readbooks: readBooks?.allObjects.map { ($0 as! ReadBookEntity).toDomain() } ?? []
)
}
} 이로 인해 아래와 같이 결합도가 낮아졌고, 추후에는 DB에서 사용하는 엔티티를 외부에 모두 드러내지 않아 안정성이 보장될 것이라 생각한다. 한계.toDomain()과 같은 함수를 사용하게 되면 DB Entity와 Domain Entity가 서로에 대해 알고 있어야한다. 즉 결합도가 증가하게 된다. |
배경
앱을 개선하고 방향성을 변경하면서 두가지 요구사항이 발생했다.
이 때 아래와 같은 문제가 발생했다.
고민사항
내 생각
오늘은 2번에 대해 학습하고 정리해보겠다.
클린 아키텍쳐 with mvvm 글들에서 관련 내용을 간단히 접해볼 수 있었다
The text was updated successfully, but these errors were encountered: