현실을 넘어
close
프로필 배경
프로필 로고

현실을 넘어

  • 분류 전체보기
    • 자바
      • 일반
      • 알고리즘
      • 객사오
      • 스프링입문객체지향
      • 리팩토링
      • 스프링부트3
      • JPA
      • QueryDsl
      • Spring Security
    • 코틀린
      • 코틀린인액션
      • 알고리즘
    • 일 관련 삽질
    • JIRA
    • 도메인주도개발
    • DB
      • Mysql
    • MQ
      • Apache Kafka
    • Docker-Kubernetes
    • GITHUB
    • REST API
    • 리눅스
  • 홈
  • 태그
  • 방명록

[DDD] 응용 서비스의 역할

응용 서비스도메인 객체 ↔ 표현 영역 사이를 연결하는 창구 역할을 한다.public Result doSomeCreation(CreateSomeReq req) { // 1. 데이터 중복 등 데이터가 유효한지 검사한다. validate(req); // 2. 애그리거트를 생성한다. SomeAgg newAgg = createSome(req); // 도메인 영역 // 3. 리포지터리에 애그리거트를 저장한다. someAggRepository.save(newAgg); // 레포지터리 영역 // 4. 결과를 리턴한다. return createSuccessResult(newAgg); // 반환값의 전 }응용 서비스가 복잡해진다면.. 도메인 로직의 일부를 구현하고 있을 가능성이 높습니다.코드 중복이나 로직 분산 등 코드 ..

  • format_list_bulleted 도메인주도개발
  • · 2024. 1. 19.
  • textsms

[DDD] 도메인 로직을 넣지 않기!

암호 변경기능public class ChangePasswordService { public void changePassword(String memberId, String oldPw, String newPw) { Member member = memberRepository.findById(memberId); checkMemberExists(member); member.changePassword(oldPw, newPw); } }changePassword 의 경우 Member 애그리거트에서 수행중이다.왜 Member 애그리거트에서 해당 행위를 수행할까?이유는 2가지이다코드의 응집성의 저하도메인 데이터와 관련된 로직이 분산되어 있으며, 도메인 로직을 이해하기 위하여 여러 영역을 분석해야할 가능성이 있음.코드의 중..

  • format_list_bulleted 도메인주도개발
  • · 2024. 1. 19.
  • textsms

[DDD] 서비스 레이어에서 공통로직의 분리 방법

만약 서비스레이어에서 공통 로직이 발생하는 경우 어떤식으로 코드를 작성할 수 있을까?글 작성 전 도메인 로직에서는 별도 레포지터리 영역을 접근할 수 없기에, 서비스 영역에서만 작성이 가능하다는 전제가 필요하다.일단 서비스 레이어 자체 MemberService 에서 단순히 하나의 메서드를 만들어서 공통으로 사용하는 방법도 있다.해당 방법은서비스 레이어의 코드가 너무 길어진다 - 는 단점코드 크기가 커지면서 연란성이 적은 코드가 한 클래스에 함께 위치하여코드 이해도를 저하시킬 위험성이 존재한다.해당 문제점을 해결을 위해서는 일단 레이어 ( 혹은 클래스 ) 를 분리하는 방법이 존재한다.오로지 비밀번호를 변경하는 서비스레이어를 생성하여public class ChangePasswordService { privat..

  • format_list_bulleted 도메인주도개발
  • · 2024. 1. 19.
  • textsms

[DDD] 인터페이스가 필요한가?

응용 서비스 구현시 인터페이스의 필요성에 대해 종종 논의됨.public interface ChangePasswordService { public void changePassword(String memberId, String curPw, String newPw); } public class ChangePasswordServiceImpl implements ChangePasswordService { // 구현 ... }인터페이스가 필요한 경우?여러 구현체가 존재하는 경우 런타임에 구현 객체를 바꿀 필요가 있을 경우단일 구현체다?하나의 응용 서비스에 대해 한 가지의 구현만 존재하기에, 인터페이스로 인한 구조 복잡성이 쓸 데 없이 증가한다.만약 TDD 의 경우TDD 는 실제 클래스의 구현 전에 인터페이스의 작성..

  • format_list_bulleted 도메인주도개발
  • · 2024. 1. 19.
  • textsms

[DDD] 표현 영역과 응용 영역

표현영역(Presentation Layer)사용자 요청의 해석사용자의 웹 요청을 해석하고 처리한다.예시사용자가 웹 폼에 입력한 데이터를 기반으로 HTTP 요청을 처리하고 어떤 기능을 실행할지 판단.요청의 변환과 서비스의 실행받은 요청을 응용 서비스가 요구하는 형식으로 변환 , 응용 서비스의 메서드를 호출응용 영역(Application Layer)기능 제공사용자의 요청에 따른 실제 기능 제공필요한 입력 값을 받고 수행 결과 반환한다표현 영역과의 독립성응용 서비스는 표현 영역과 독립적이다.단순히 기능을 수행하는 역할만을 함.사용자가 웹 브라우저 사용여부, REST API 호출여부, TCP 소켓 사용여부를 알 필요가 없음. Uploaded by N2T

  • format_list_bulleted 도메인주도개발
  • · 2024. 1. 19.
  • textsms
  • navigate_before
  • 1
  • navigate_next
공지사항
  • ㅇ
전체 카테고리
  • 분류 전체보기
    • 자바
      • 일반
      • 알고리즘
      • 객사오
      • 스프링입문객체지향
      • 리팩토링
      • 스프링부트3
      • JPA
      • QueryDsl
      • Spring Security
    • 코틀린
      • 코틀린인액션
      • 알고리즘
    • 일 관련 삽질
    • JIRA
    • 도메인주도개발
    • DB
      • Mysql
    • MQ
      • Apache Kafka
    • Docker-Kubernetes
    • GITHUB
    • REST API
    • 리눅스
최근 글
인기 글
최근 댓글
태그
  • #Kotlin
  • #ddd
  • #객체지향
  • #자바
  • #QueryDSL
  • #도메인주도개발
  • #알고리즘
  • #객사오
  • #JPA
  • #리팩토링
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바