링크
용어
Value Object
: 비즈니스 용어를 나타내는 불변 객체Entity
: 속성이 아닌 식별성을 기준으로 정의되는 도메인 객체, 여러 Value Object로 구성(예: DB의 한 개 row)Service
: 도메인 객체에 포함할 수 없는 오퍼레이션 연산을 갖는 객체Aggregate
: 연관된 Value Object와 Entity의 묶음Factory
: 복잡한 Entity, Aggregate를 캡슐화하여 여러 객체를 동시에 생성Repository
: Aggregate의 영속성 및 등록·수정·삭제·조회 시 일관성 관리
한국어
- 영상 | 아키텍처 정의와 중요성
- 영상 | DTO와 도메인을 분리해야 하는 이유
- 영상 | DTO는 어디서 사용하지
- 영상 | 클린아키텍쳐로 이사가기
- 영상 | 지속 성장 가능한 코드를 만들어가는 방법
- 문서 | 마이크로서비스 내부아키텍처 - 1회 : 데이터 중심 아키텍처의 문제점
- 문서 | 마이크로서비스 내부아키텍처 - 2회 : 클린 아키텍처와 헥사고널 아키텍처
- 문서 | 마이크로서비스 내부아키텍처 - 3회 : 어플리케이션 구성 패턴
- 문서 | 레거시 시스템의 새로운 비즈니스 가치 창출 - IT 현대화(Modernization) 방안과 사례
- 문서 | 박용우 1회, 제임스 루이스와 마틴 파울러의 MSA
- 문서 | 박용우 2회, 처음부터 MSA로 시작하는 것은 위험하다
- 문서 | 박용우 3회, 서비스 메시와 아키텍처 결정 포인트
- 문서 | 박용우 4회, NCD 기반 애플리케이션 현대화
아키텍처
아키텍처 기초
- 문서 | 아키텍처 (Architecture)란 무엇인가
아키텍처는 다양한 영역과 관련된 의사결정의 집약체이며, 이후 이어질 활동에 대한 기준이 된다.
- 소스 | code-maze, Hexagonal Architectural Pattern in C#
- 소스 | code-maze, Clean Architecture in .NET
- 문서 | Do you keep your domain layer independent of the data access concerns?
개선 전
- Attribute을 이용한 데이터베이스 제약 조건 정의
[MaxLength(15)]
public string City { get; set; }
개선 후: 데이터베이스 제약 조건 분리
- IEntityTypeConfiguration<T>
Config(EntityTypeBuilder<T> builder)
{
builder.Property(e => e.City).HasMaxLength(15);
} - 문서 | Do you know when to use value objects?
개선 전
- string AcACCount { get; set; }
개선 후: ValueObject(= logic + validation), ValueObject을 Entity 테이블에 통합
- IEntityTypeConfiguration<T>
Config(EntityTypeBuilder<T> builder)
{
builder.OwnsOne(e => e.AdAccount);
} - 문서 | Do you use Strongly Typed IDs to avoid Primitive Obsession
- 영상 | This Is My FAVORITE Error Handling Class
아키텍처 템플릿
- 소스 | Clean Architecture Template, Ardalis
- 소스 | Clean Architecture Template, Amichai Mantinband
- 소스 | Clean Architecture Template, Jason Taylordev
- 소스 | Clean Architecture Template, SSW
- 소스 | Clean Architecture Template, Phong Nguyen
- 소스 | Clean Architecture Template, Casey
아키텍처 예제
- 소스 | sample-dotnet-core-cqrs-api, Kamil Grzybek
- 소스 | MauiCleanTodos
- 소스 | dotnet-modular-monolith
- 소스 | Clean-Architecture-with-.NET, PacktPublishing
- 소스 | TodoApi
도메인 주도 설계
도메인 주도 설계 개념
- 문서 | Kamil Grzybek | REST API DATA VALIDATION
- 문서 | Kamil Grzybek | DOMAIN MODEL VALIDATION
- 문서 | Kamil Grzybek | SIMPLE CQRS IMPLEMENTATION WITH RAW SQL AND DDD
- 소스 | modular-monolith-with-ddd, Kamil Grzybek
- 문서 | Modular Monolith: A Primer | 한글, 영문
- 문서 | Modular Monolith: Architectural Drivers | 한글, 영문
- 문서 | Modular Monolith: Architecture Enforcement | 한글, 영문
- 문서 | Modular Monolith: Integration Styles | 한글, 영문
- 문서 | Modular Monolith: Domain-Centric Design | 한글, 영문
- 소스 | Hands-On-Domain-Driven-Design-with-.NET-Core
- 소스 | Stop using Entity Framework as a DTO provider
- 영상 | Stop using Entity Framework as a DTO provider
- 소스 | refactoring-from-anemic-to-rich-domain-model-example
- 소스 | dotnet-domain-driven-design
- 소스 | pluralsight-ddd-fundamentals
- 문서 | Scaffold Your Clean DDD Web Application | Part 6: Domain-Driven Design Workflow Patterns
도메인 주도 리팩토링
- 소스 | DDD-NoDuplicates
- 소스 | How To Use Domain-Driven Design In Clean Architecture
- 소스 | Refactoring From Transaction Script to Domain-Driven Design
- 소스 | Domain-Driven Refactoring - Jimmy Bogard
- 문서 | Repeatable execution
- 문서 | Repeatable execution in C#
- 문서 | Discerning and maintaining purity
MediatR
- 영상 | MediatR in depth
EF Core
- 소스 | efcore-concurrency-handling
- 영상 | Mapping Domain-Driven Design Concepts To The Database With EF Core(IEntityTypeConfiguration)
ASP.NET
Primitives
테스트
단위 테스트
아키텍처 테스트
통합 테스트 | WebApi
- 문서 | Integration tests in ASP.NET Core
- 문서 | How to test your C# Web API
- 문서 | How to test ASP.NET Core Minimal APIs
- 문서 | Integration Testing ASP.NET Core APIs incl. auth and database
- 소스 | ASP.NET Core API Integration Testing Demo
통합 테스트 | Postgres
Snapshot 테스트
- 문서 | Testing an incremental generator with snapshot testing
- 문서 | Snapshot Testing with Verify
- 영상 | OSS Power-Ups: Verify
Fake 데이터
- 문서 | Fake data substitution for tests in C# with Bogus
- 문서 | Realistic Data Generation in .NET With Bogus