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

전술적 설계 - 간단한 비즈니스 로직 구현 #5

Open
nooose opened this issue Aug 12, 2024 · 2 comments
Open

전술적 설계 - 간단한 비즈니스 로직 구현 #5

nooose opened this issue Aug 12, 2024 · 2 comments
Labels
documentation Improvements or additions to documentation

Comments

@nooose
Copy link
Owner

nooose commented Aug 12, 2024

📅 2024.08.12 - 간단한 비즈니스 로직 구현

📝 학습 내용 요약

  • 주요 주제: 비즈니스 로직을 구현하는 방법 소개

🧠 이해한 내용

  • 핵심 개념: 도메인 모델 패턴을 배우기에 앞서 비즈니스 로직 패턴의 기반인 트랜잭션 스크립트 방식과 액티브 레코드 방식을 배운다.
  • 트랜잭션 스크립트: 절차지향 스크립트 방식으로 구현한다.
@Service
class UserService(
    private val userDao: UserDao,
    private val teamDao: TeamDao
) {
    @Transactional
    fun createUserWithTeam(name: String) {
        val team = Team()
        teamDao.save(team)

        val user = User(name, team.id)
        userDao.save(user);
    }
}
  • 액티브 레코드: 데이터베이스 접근을 캡슐화하고 해당 데이터에 메인 로직을 추가한다.
  • 빈약한 도메인 모델 안티패턴이라고도 불린다.
class User(
    val name: String,
    val email: String
) {
    
    fun create() {
        save(this)
    }
    
    private fun save(user: User) {
        // DB 저장 로직
    }
}
  • 위 패턴들은 단순한 상황에서 사용이 가능하다. 로직이 복잡하다면 도메인 모델 패턴을 사용해야함

❓ 궁금한 점 및 논의할 주제

  • 질문 1: 데이터를 단순히 조회하는 상황에서는 항상 트랜잭션 스크립트 방식을 사용하는 것이 올바를까?

🔍 추가 참고 자료

🗒 기타 메모

@nooose nooose added the documentation Improvements or additions to documentation label Aug 12, 2024
@nonoro
Copy link
Collaborator

nonoro commented Aug 19, 2024

📅 2024.08.19 - 간단한 비즈니스 로직 구현: 트랜잭션 스크립트와 액티브 레코드

📝 학습 내용 요약

  • 트랜잭션 스크립트

    • 절차지향적인 스크립트로 구성
    • 작업에 트랜잭션을 적용하여 작업이 성공하거나 실패하도록 보장
    • ETL과 같은 단순한 비즈니스 로직을 가진 지원 하위 도메인에 적합
  • 액티브 레코드

    • 간단한 CRUD 데이터 접근 방법을 제공하는 자료구조
    • 복잡한 자료구조와 데이터베이스 스키마 간의 매핑을 간소화

🧠 이해한 내용

  • 단순한 비즈니스 로직이나 ETL 작업처럼 절차적으로 처리하면 되는 경우에 사용하자!
  • 액티브 레코드는 CRUD 작업이 많고, 데이터베이스와 객체 간의 매핑이 중요할 때, 그리고 로직이 비교적 단순한 경우에 사용하자!

❓ 궁금한 점 및 논의할 주제

질문 1: 트랜잭션 스크립트는 그냥 네이티브 쿼리 날리는거고 액티브 레코드는 객체를 가지고 db와 상호작용하는 것 일까?

🔍 추가 참고 자료

🗒 기타 메모

@dltkqnr
Copy link

dltkqnr commented Aug 19, 2024

📅 2024.08.19 - 간단한 비즈니스 로직 구현

📝 학습 내용 요약

  • 다소 단순한 비즈니스 로직을 구현하는데 적합한 두가지 패턴.
    → ‘트랜잭션 스크립트’와 ‘액티브 레코드’

🧠 이해한 내용

트랜잭션 스크립트

  • 트랜잭션 스크립트는 비즈니스 로직이 단순한 절차적 작업처럼 매우 간단한 도메인에 효과적이다.
    → 지원 하위 도메인에 적합
  • 일반 하위 도메인과 같은 외부 시스템과 연동하기 위한 어댑터로 사용하거나, 충돌 방지 계층의 일부로 사용할 수 있다.

액티브 레코드

  • 데이터베이스에 대한 접근을 최적화하는 트랜잭션 스크립트이기 때문에 이 패턴은 사용자 입력의 유효성을 검사하는 CRUD 작업과 같은 비교적 간단한 비즈니스 로직에 쓴다.
    → 지원 하위 도메인, 일반 하위 도메인, 외부 솔루션과의 연동, 모델 변환 작업에 적합

두 패턴의 차이점

액티브 레코드의 경우 복잡한 자료구조를 데이터베이스 스키마에 매핑하는 복잡성을 해소할 수 있다.

❓ 궁금한 점 및 논의할 주제

질문 1: 코드의 무결성 보다 실용적인 접근 방식이 더 바람직한 경우가 어떠한 것들이 있을까?

🔍 추가 참고 자료

🗒 기타 메모

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

3 participants