Closed neropsys closed 3 years ago
혁재님 내용은, 테스트는 오히려 @kmmin78 님 보다 더 훌륭합니다만 전반적인 구조를 다시한번 생각해 보시는게 어떨까 싶습니다.
전통적인 MVC 구조의 God service 보다는 개별 use case 중심으로 기능을 나누는 것이 유지보수성이 훨씬 더 좋습니다.
파일 구조를 생각해 봤을 때,
service/
DocumentService.kt
UserService.kt
...
보다,
useCase/
documents/
FindDocumentByTitle.kt
CreateDocument.kt
users/
CreateUser.kt
ModifyUserInformation.kt
같은 형태가 어떤 파일을 열어봐야 할지가 한눈에 더 들어오죠. 특히 지금같은 형태로는 Document + User 가 필요한 로직이 발생할 경우 이를 DocumentService 에 넣을지, UserService 에 넣을지, DocumentUserService(UserDocumentService 는 안될까?)에 넣을지 같은 고민이 생기겠죠. 반면 use case 중심이라면, 가령 '특정 문서의 모든 편집자 이력 확인' 같은 기능이라면 이렇게 표현할 수도 있을 것 같습니다.
useCase/
simple/
documents/
users/
...
complex/
ShowAllDocumentContributors.kt
가급적이면 이 프로젝트 동안에는 조금 고통스럽더라도 전통적인 MVC 보다 use case 중심으로 생각하고, 설계하는 연습을 한번 해 보시죠.
원래 paradigm shift 는 굉장히 고통스럽습니다만 (참고로 제가 처음 ReactiveX 를 배울때 함수형 프로그래밍 사고로 강제전환 하느라 1년 반 정도 정말 괴로웠습니다) 어떻게던 극복하고 나면 코드를 바라보는 시야가 훨씬 더 넓어지게 됩니다.
이 PR 은 merge 하지 않기로 합의.
DocumentService에 List 반환하는 findDocumentHistory 인터페이스 추가
closes #43