Skip to content

ybh89/ddd-with-mybatis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

프로젝트 개요

  • mybatis 환경에서 DDD를 구현하기 위한 여러가지 패턴의 아이디어를 데모로 구현한다.
  • mybatis 환경에서 JPA 처럼 자바를 객체지향적으로 사용하기 위한 아이디어를 데모로 구현한다.

기술 스택

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

데모 도메인 소개

  • Maker(제조사), Brand(브랜드), Series(시리즈)로 구성
  • V3 부터 MakerSynonym(제조사 동의어), BrandSynonym(브랜드 동의어), URL(제조사 사이트), URL(브랜드 사이트) 추가됨.
  • 제조사->브랜드->시리즈 로 단반향으로 구현
  • 제조사->브랜드 는 일대다 관계
  • 브랜드->시리즈 는 일대다 관계
  • 제조사, 브랜드는 수정은 가능하나 삭제될 수 없다. 시리즈만 삭제 가능.
  • 제조사, 브랜드, 시리즈는 엔티티
  • 제조사 동의어, 브랜드 동의어는 값 타입 컬렉션
  • 제조사 사이트, 브랜드 사이트는 값 타입
  • 제조사->제조사 동의어 는 일대다 관계
  • 브랜드->브랜드 동의어 는 일대다 관계

개발 내용

  • 도메인 모델 패턴으로 비지니스 로직은 도메인에 있다고 가정(실제 비즈니스로직은 없지만..)
  • 수정될때, 업데이트될 제조사나 브랜드나 시리즈는 식별자(id)가 들어온다.
  • 수정될때, 추가될 브랜드나 시리즈는 식별자(id)가 없다.
  • 수정될때, 삭제될 시리즈는 기존 브랜드에는 존재하나 요청한 브랜드에는 존재하지 않는다.
  • Aggregate 단위로 추가, 수정, 삭제, 조회 되야한다.
  • 비즈니스가 추가되면 Aggregate root인 Maker를 통해 수행되야한다.
  • 엔티티를 타입으로 정의하기 위해 인터페이스를 만들었다. 엔티티를 어노테이션으로 정의
  • 기존에는 식별자만 있으면 업데이트 쿼리가 나가는 구조이기 때문에, 실제 엔티티의 값이 다른지 비교해주는 로직을 리픅렉션으로 구현하였다.
  • 변경 감지를 무시할 수 있는 어노테이션 정의(필드, 클래스 레벨에서 적용 가능)
  • 제조사 동의어, 제조사 사이트, 브랜드 동의어, 브랜드 사이트 값 타입 도메인 추가(더 복잡한 예제로 변경)

문제점

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages