f-lab-edu / awesome-wiki

[연봉 5000만원 이상 이직] Spring framework 를 이용한 다중 접속 Wiki
15 stars 4 forks source link

문서 편집 이력(역사) 조회 기능 #47

Closed neropsys closed 3 years ago

neropsys commented 3 years ago

DocumentService에 List 반환하는 findDocumentHistory 인터페이스 추가

closes #43

FrancescoJo commented 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년 반 정도 정말 괴로웠습니다) 어떻게던 극복하고 나면 코드를 바라보는 시야가 훨씬 더 넓어지게 됩니다.

FrancescoJo commented 3 years ago

이 PR 은 merge 하지 않기로 합의.