-
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
유저 통계와 전체 통계 분리 리팩토링(#104) #113
base: dev
Are you sure you want to change the base?
Conversation
f9c5d6e
to
d70ab43
Compare
고생하셨습니다! 제 개인적인 의견만 첨부하겠습니다..! |
|
@@ -1,6 +1,6 @@ | |||
package com.dnd.namuiwiki.domain.statistic.type; | |||
|
|||
public enum StatisticsType { | |||
public enum StatisticsCalculationType { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
개인적으론 statistics라는 뜻 자체가 이미 계산을 의미하고 있어서 기존의 StatisticsType의 클래스명이 더 의미가 적절하다고 보입니다..!
@@ -0,0 +1,5 @@ | |||
package com.dnd.namuiwiki.domain.dashboard.type; | |||
|
|||
public enum DashboardStatisticType { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Dashboard가 어떤 형식으로 보이는지에 대한 타입이라, DashboardViewType과 같은 클래스명이 더 적절해 보입니다.
StatisticsCalculationType과 DashboardStatisticType에 statistic이라는 이름이 동일하게 들어가는데, StatisticsCalculationType과 DashboardStatisticType이 항상 같은 값을 갖는 게 아니라서, 헷갈릴 수도 있을 것 같아요
@@ -0,0 +1,13 @@ | |||
package com.dnd.namuiwiki.domain.dashboard.type; | |||
|
|||
public enum AnalysisType { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AnalysisType의 경우, 통계의 모수에 대한 의미라고 생각되어서, StatisticSubjectType, personal, global 같은 네이밍이 어떨까요? 클래스의 위치도 statistic 도메인 하위에 위치하는 게 더 적절해 보여요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AnalysisType
의 각 요소의 뜻은 이러합니다.
- USER : Dashboard 값 필요
- POPULATION : Dashboard 값 필요, PopulationStatistic 값 필요
이 enum 값은 Dashboard를 DashboardDto로 변환해서 응답할 때 사용되기 때문에 Dashboard 도메인이 더 적합하다고 생각합니다.
말씀하신 |
@rlacksgus97 말씀해주신대로, 네이밍을 전체적으로 통일하는 것이 필요해 보여요. types
dashboard
statistic
변경 제안위에서 (*) 표시된 것들에 대해 네이빙 변경 제안드립니다. AnalysisType=> 제거 해당 타입이 population 통계량이 필요하냐 안하냐에 대한 판단이라서, 이 enum을 제거하고 boolean으로 대체하는 건 어떨까요? DashboardStatisticType=> DashboardComputationStrategy
말씀해주신 내용을 고려해보았는데, view는 그래픽적으로 보이는 것이라는 느낌이 강하다고 생각해요. StatisticsCalculationType=> QuestionStatisticStrategy 정리해보니 "문항"에 대해서 통계량을 계산하는 것으로 귀결되더라고요. Statistics=>제거 PopulationStatistic=> PopulationDashboard 사용자의 대시보드는 Dashboard, 전체 통계는 전체 사용자의 Dashboard로 칠 수 있지 않을까 싶었습니다. EntireStatistic=> PopulationStatitsic |
요약
통계 관련하여 전반적인 리팩토링을 진행하였습니다.
유저 통계(Dashboard)와 전체 통계(Statistics)를 분리하는 작업에서 파생되는 작업들입니다.
HAPPY, SAD, ... 등 DashboardType 별로 하드코딩되어 있던 부분을 최대한 제거하였습니다.
PopulationStatistic 관련 로직은 아직 기존 상태로 남아 있으며, 이는 #114 에서 진행할 예정입니다.
코드가 얽히고 설켜 있어 PR 크기가 커진 점.. 양해 바랍니다🥹
변경된 점
1. Statistics와 관련 클래스들의 패키지 이동 commit
Statistics 클래스, Statistic 클래스와 그 자식들(AverageStatistics, RatioStatistics)이 statistics 패키지에서 dashboard 패키지로 이동되었습니다.
Dashboard Collection에서 Statistics를 필드로 가지고 있으며, Statistic 구현체들 모두 dashboard에서 사용 중입니다.
2. 통계량 업데이트 로직 분리 commit
유저의 통계량(dashboard)를 업데이트하는 로직과 전체통계량(statistics) 업데이트하는 로직을 분리하였습니다.
3. Statistic을 통해 Dashboard로 변환하는 로직 테스트 코드 작성 commit
이후 리팩토링 진행을 위해 테스트 코드 작성하였습니다.
Statistic을 DashboardDto로 변환하는 로직에 관한 테스트입니다.
4. Statistic -> DashboardComponent 변환 방식 변경 commit
기존에 DashboardType 별로 모두 각각 생성하던 로직을 3가지로 분류하였습니다.
DashboardFactory를 통해서 DashboardComponent를 생성할 수 있으며, PopulationStatistic과 UserStatistic을 구분하였습니다.
따라서 DashboardComponent를 생성하는 로직도 DashboardService에서 Dashboard Entity로 이동되었습니다.
5. BorrowingLimitEntireStatistic -> AverageEntireStatistic commit
확장성없이 작성되어 있는 BorrowingLimitEntireStatistic을 AverageEntireStatistic로 변경하였습니다.
4번의 과정에서 Population 타입의 AverageDashboard를 처리하기 위해 추상화하였습니다.
6. Population과 User 타입에 따른 Dashboard 변환 로직 분리 commit
AnalysisType
enum이 추가되었습니다.DashboardType에서 해당 값을 가지고 있어 기존에 HAPPY, SAD, ... 등 하드코딩되어 있던 것을
dashboard.getUserDashboards()
메소드를 통해 처리할 수 있게 되었습니다.특이 사항
배포가 되기 전, 운영 DB 데이터 중 일부를 수정해야 합니다.