Skip to content
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

Feature | CAKK-104 | 애그리거트 설계 및 구현 #231

Merged
merged 8 commits into from
Dec 12, 2024

Conversation

lcomment
Copy link
Collaborator

Issue Number

CAKK-104

Description

사전에 논의하여 설계한대로 애그리거트를 구현했습니다. 구체화 하는 과정에서 Domain인지 Value Object인지 다음과 같은 기준으로 분류했습니다.

  • 식별성(ID)의 필요 여부
    • 필요하다면 도메인 객체
    • 필요 없다면 값 객체
  • 라이프사이클 관리
    • 개별적으로 관리되어야 하면 도메인 객체
    • 불필요하면 값 객체
  • 동등성 비교 방식
    • 값이 기준이면 값 객체.
    • 고유 식별자가 기준이면 도메인 객체
  • 불변성
    • 값 객체는 일반적으로 불변 (값이 바뀌면 새 객체 생성)
    • 도메인 객체는 데이터 수정 가능

추가적으로 다음과 같은 항목을 자세히 봐주세요.

  • 패키지 명
  • 도메인 객체인지 값 객체인지
  • 각 필드의 불변성
  • 각 객체의 생성자와 필드
    • 불변은 생성자에 val을 붙였고, 가변만 밑에서 var로 새로 정의
    • private set을 선언하기 위함
    • 장점: 라인수가 짧고, 불변과 가변을 구별하기 편함
    • 단점: 필드 선언 통일성이 깨짐

Core Code

예시로 User 도메인 객체 코드를 첨부합니다.

class User(
	id: Long?,
	val provider: Provider,
	nickname: String,
	profileImageUrl: String,
	email: String,
	gender: Gender,
	birthday: LocalDate,
	device: Device,
	val role: Role,
	val cakeShopHearts: Set<CakeShopHeart> = emptySet(),
	val cakeHearts: Set<CakeHeart> = emptySet()
) : AggregateRoot<User, Long>() {

	var nickname: String = nickname
		private set

	var profileImageUrl: String = profileImageUrl
		private set

	var email: String = email
		private set

	var gender: Gender = gender
		private set

	var birthday: LocalDate = birthday
		private set

	var device: Device = device
		private set
}

etc

@lcomment lcomment added the feature 새로운 기능 개발 label Dec 11, 2024
@lcomment lcomment requested a review from YongsHub December 11, 2024 10:23
@lcomment lcomment self-assigned this Dec 11, 2024
Copy link

github-actions bot commented Dec 11, 2024

Test Results

201 tests   201 ✅  43s ⏱️
 38 suites    0 💤
 38 files      0 ❌

Results for commit c75a155.

♻️ This comment has been updated with latest results.

Copy link

codecov bot commented Dec 11, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Impacted file tree graph

@@              Coverage Diff              @@
##             develop     #231      +/-   ##
=============================================
- Coverage      92.14%   90.19%   -1.95%     
+ Complexity       329      238      -91     
=============================================
  Files            109       59      -50     
  Lines            967      612     -355     
  Branches          34       17      -17     
=============================================
- Hits             891      552     -339     
+ Misses            58       51       -7     
+ Partials          18        9       -9     

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update aa9f2ad...c75a155. Read the comment docs.

Copy link
Contributor

@YongsHub YongsHub left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

일단 이렇게 설계하구 양방향 참조 관계를 다시 제거하는 쪽으로 가야겠네요 !

@lcomment
Copy link
Collaborator Author

@YongsHub Entity에서 말씀하시는거죠? 도메인 모델은 양방향 참조가 없이 구현했는데, 리뷰 하면서 발견하신 부분이 있나해서요 !

@YongsHub
Copy link
Contributor

@YongsHub Entity에서 말씀하시는거죠? 도메인 모델은 양방향 참조가 없이 구현했는데, 리뷰 하면서 발견하신 부분이 있나해서요 !

네네 엔티티요!

@lcomment lcomment merged commit 386fd69 into develop Dec 12, 2024
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature 새로운 기능 개발
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants