Skip to content

ybh89/ddd-with-mybatis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mybatis 환경에서 DDD 데모 프로젝트

프로젝트 개요

  • mybatis 환경에서 DDD를 구현하기 위한 여러가지 패턴의 아이디어를 데모로 구현한다.
  • 아이디어가 있다면 버전 패키지를 만들고 구현해볼 수 있다.

기술 스택

  • Java 1.8
  • h2 in-memory
  • mybatis
  • Spring Data JDBC
  • Spring Boot 2.6.1
  • Gradle Project
  • Lombok
  • RestAssured

데모 도메인 소개

  • Maker(제조사), Brand(브랜드), Series(시리즈)로 구성
  • 제조사->브랜드->시리즈 로 단반향으로 구현
  • 제조사->브랜드 는 일대다 관계
  • 브랜드->시리즈 는 일대다 관계
  • 제조사, 브랜드는 수정은 가능하나 삭제될 수 없다. 시리즈만 삭제 가능.

V1

  • 도메인 모델 패턴으로 비지니스 로직은 도메인에 있다고 가정(실제 비즈니스로직은 없지만..)
  • 서비스에서 각 도메인에 해당하는 Repository 로 저장하고 수정고 삭제한다.
  • 수정될때, 업데이트될 제조사나 브랜드나 시리즈는 식별자(id)가 들어온다.
  • 수정될때, 추가될 브랜드나 시리즈는 식별자(id)가 없다.
  • 수정될때, 삭제될 시리즈는 기존 브랜드에는 존재하나 요청한 브랜드에는 존재하지 않는다.

V2

  • V1에서 서비스에서 실제 데이터를 어디에 어떻게 저장할지, 수정할지, 삭제할지 결정하기 때문에 해당 책임을 AggregateRepository에 위임한다.
  • Aggregate 단위로 추가, 수정, 삭제, 조회 되야한다.
  • V1에서는 이미 추가, 조회는 Aggregate 단위로 구현되어 있음.
  • 비즈니스가 추가되면 Aggregate root인 Maker를 통해 수행되야한다.

문제점

  • V1 - 도메인 모델 패턴이지만 도메인 주도설계는 아니다.
  • V2 - 도메인 모델 패턴 + 애그리거트 패턴이지만.. 변경감지(Dirty Checking)가 도메인에 의존적이다.
  • 지금은 변경감지를 도메인마다 구현해야하는 구조. 물론 모든 도메인이 적용될 수 있는 변경감지 모듈을 만들면 좋지만..
  • 그럴거면 그냥 JPA 를 도입하는게 더 빠르지 않을까? 뭔가 좋은 생각이 없을까?

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages