Entity에 팩토리 패턴 적용해보기
2024. 6. 10. 20:39ㆍ개발자 과정/Kotlin
문제고민
1. Service에서 Requst를 Save하는데, 이 과정이 너무 줄도 많이 차지하고, Entity노출도 있다고 생각했다.
2. 그렇다면 Entity내부에서 Entity에 값을 채워넣고, 작성된 자기자신을 return하는 방법이 뭐가 있을까 고민하였다.
해결방안
그 고민을 통해 찾은 것이 Factory 였다.
솔루션
Entity
companion object {
fun saveEntity(request: CreateTodoRequest, userInfo: UserResponse): Todo {
return Todo(
title = request.title,
description = request.description,
nickname = userInfo.nickname,
userEmail = userInfo.userEmail
)
}
}
companion object를 통해 Entity내부에서 값을 채워넣는다.
Service
before
@Transactional
fun createTodo(request: CreateTodoRequest): TodoResponse {
return userService.getUserInfo()
.let { todoRepository.save(
Todo(
userEmail = it.userEmail,
nickname = it.nickname,
description = request.description,
title = request.title
)
) }.toResponse()
}
after
@Transactional
fun createTodo(request: CreateTodoRequest): TodoResponse {
return userService.getUserInfo()
.let { todoRepository.save(Todo.saveEntity(request,it)) }
.toResponse()
}
saveEntity를 호출하는 과정에서 유저정보를 받아오지 않고, 받아온 유저정보를 토대로 saveEntity를 호출하는 것이 옳아 보여 let{..}을 사용하였다. 이것으로 Service는 간단한 흐름만 보여주고, 구체적인 로직은 각자의 객체에서 처리하도록 하였다.
새로 알게된 것
허나, 이런 방법이 의존성 측면에서 좋지는 않다고 한다. Entity단계까지 DTO를 끌고 내려오는 격이라, 3Layer아키텍쳐에서도 그렇게 좋은 방향성은 아닐것 같다. 이를 해소하기 위한 방법으로 Entity와 붙어있는 Service를 추가로 만들면 된다는 조언을 받았다.
흠...분명 Entity의 로직은 Entity에서 관리하라고 했던거 같기도 한데...아마 튜터님들의 성향이 다 달라 그런걸지도 모르겠다.
'개발자 과정 > Kotlin' 카테고리의 다른 글
UBIS 팀 프로젝트 기획 / 개발 기록 (0) | 2024.06.18 |
---|---|
UBIS 팀 프로젝트 회고 (0) | 2024.06.18 |
TodoApp 심화 과제 (0) | 2024.06.10 |
카카오 oauth2로그인 간단 구현 (0) | 2024.06.04 |
팀 협업 프로젝트 (newsFeed) 회고 (1) | 2024.06.03 |