Xendor는 단일 책임과 문제의 분리를 시행하여 간단하고 깨끗한 디자인을 만드는 데 사용할 수있는 .NET 코어 프레임 워크입니다. 고급 기능은 도메인 구동 설계 (DDD), 명령 쿼리 책임 Segragation (CQRS) 및 이벤트 소싱에 이상적입니다. Xendor에는 RabbitMQ 통합이 있습니다.
명령-쿼리 책임 분리는 데이터를 쿼리하는 것과 데이터를 돌연변이하는 작업을 분리하도록 지시하는 패턴입니다. CQS (Command Query Separation) CQS에서 파생 된 클래스에는 두 가지 종류의 방법이있을 수 있으며, 상태를 돌연변이하고 무효를 반환하는 방법과 상태를 반환하지만 변경하지는 않습니다.
CQRS는 당신이 적용하는 패턴입니까? 내부? 귀하의 서비스/신청서 및 귀하는 서비스의 일부에만 적용 할 수 있습니다.
데이터의 현재 상태 만 도메인에 저장하는 대신 부록 전용 저장소를 사용하여 해당 데이터에 대한 전체 조치를 기록하십시오. 상점은 레코드 시스템 역할을하며 도메인 객체를 실현하는 데 사용될 수 있습니다. 이는 데이터 모델과 비즈니스 도메인을 동기화하면서 성능, 확장 성 및 응답 성을 향상 시켜서 복잡한 도메인의 작업을 단순화 할 수 있습니다. 또한 거래 데이터에 대한 일관성을 제공하고 보상 조치를 가능하게하는 완전한 감사 트레일 및 기록을 유지할 수 있습니다.
프로젝션은 이벤트 중심 시스템을 구축하는 동안 중요한 개념입니다. 동시에 매우 간단합니다.
투영은 이벤트 흐름에서 현재 상태를 도출하는 것입니다.
예를 들어, 서버가 모든 가입자에게 이벤트 스트림을 게시하는 상황을 고려하십시오. 이러한 이벤트는 사용자 등록과 관련이 있으며 다음과 같습니다.
userAddedToAccount
{
"userId" : 55 ,
"username" : " alemol " ,
"name" : " Alejandro " ,
"lastName" : " Moline "
}userverifiedemail
{
"userId" : 55 ,
"email" : " [email protected] "
}Userupdated
{
"userId" : 55 ,
"lastName" : " Molines "
}이 스트림을 웹 UI의 사용자 세부 정보를 제공하는 데 사용되는이 스트림을 지속적인 읽기 모델로 투사하기 위해 이러한 이벤트의 스트림에 가입자를 첨부 할 수 있습니다. 최종 읽기 모델은 다음과 같습니다.
{
"userId" : 55 ,
"username" : " alemol " ,
"email" : " [email protected] " ,
"name" : " Alejandro " ,
"lastName" : " Molines "
}이 프로젝트를 좋아하거나 사용하는 경우 별을주십시오. 감사해요!
Github에서 문제를 만들어주십시오. 기부금, 풀 요청은 환영받는 것 이상입니다!
Xendor 는 MIT 라이센스에 따라 Copyright © 2019 Alejandro Molines 및 기타 기고자입니다.