5분 안에 MediatR
5분 안에 MediatR을 수행하는 방법. 아주 기본적인 것들과 시작하는 방법.
왜 사용합니까?
복잡한 시스템에서 복잡성을 줄이기 위해. 다른 많은 클래스에 의존하는 클래스가 아니라 중재자 클래스(중재자 패턴 사용)는 쿼리 요청과 명령을 요청이나 명령을 제공하기 위해 적절한 클래스로 내보내 쿼리 요청과 명령을 처리합니다. 호출 클래스는 어떤 클래스가 그것을 처리하는지 알지 못합니다. 그들은 단지 그들이 무언가를 요청했고 그것이 반환/완료된다는 것을 압니다.
또한 코드가 CQRS(Command Query Responsibility Segregation) 아키텍처를 따를 수 있으므로 필요한 경우 읽기 또는 쓰기를 분리하고 확장할 수 있습니다. 예를 들어 목록에 대한 읽기 쿼리는 2분마다 업데이트되는 보고 서버에 액세스할 수 있지만 업데이트는 라이브 데이터베이스로 이동할 수 있습니다.
MediatR에는 훌륭한 파이프라인 동작 기능도 있습니다. 이를 통해 문제를 분리할 수 있으므로 유효성 검사 및 로깅과 같은 작업을 요청 처리기와 별도로(사전 또는 사후) 수행할 수 있습니다.
어떻게 사용합니까?
IRequest<return type>
인터페이스를 구현하는 레코드여야 합니다.public record GetBankAccountsQuery() : IRequest<List<BankAccount>>
IRequestHandler<request type, return type>
인터페이스를 구현하는 클래스입니다.public class GetBankAccountsHandler() : IRequestHandler<GetBankAccountsQuery, List<BankAccount>>
services.AddMediatR(typeof(any class where you have mediatr code e.g. a class that implements IRequest).Assembly)
. .Assembly 부분을 사용하면 MediatR이 어셈블리를 살펴보고 IRequest 또는 IRequestHandler를 구현하는 모든 클래스를 찾고 이들 사이의 매핑을 설정할 수 있습니다. var accounts = mediator.Send(GetBankAccountQuery);
왜 사용하지 않습니까?
애플리케이션이 여러 핸들러가 이벤트를 처리해야 하는 크기에 도달하면 NServiceBus 또는 MassTransit과 같은 메시지 처리 시스템으로 이동하는 것이 더 나을 수 있습니다.
MediatR은 알림을 통해 이벤트당 여러 핸들러를 가질 수 있지만 동일한 프로세스에서 실행되므로 하나는 실패하고 다른 하나는 그렇지 않은 경우 재미있는 상태로 남게 됩니다. 핸들러가 실패했습니까?
NServiceBus와 같은 메시지 기반 시스템을 사용하면 각 이벤트를 개별적으로 처리하고 발견한 오류에 응답할 수 있습니다. 예를 들어 BankAccount에서 결제하는 이벤트는 성공했지만 확인 이메일 전송 이벤트는 실패했다고 가정합니다. 음, 보내기 확인 이메일 이벤트를 다시 대기열에 넣고 이메일 서버가 백업될 때 다른 시간에 다시 시도하십시오. 한 부분이 실패했기 때문에 전체 이벤트를 실패할 필요가 없습니다.
추상 MediatR?
중재자 패턴의 구현을 실제로 추상화해야 합니다. 그래야 필요한 경우 코드를 손상시키지 않고 MediatR 이외의 다른 중재자 패키지를 사용할 수 있습니다.
그러나... 여기에는 추가 코드와 복잡성이 필요합니다. 프로젝트가 작다면 그만한 가치가 없을 수도 있습니다. 예를 들어 확인 이메일만 보내는 작은 마이크로서비스. 나중에 쉽게 교체할 수 있는 이점과 배송 속도의 균형을 맞추십시오.
Reference
이 문제에 관하여(5분 안에 MediatR), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/deanashton/mediatr-in-5-mins-331텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)