ASP.NET MVC를 사용하여 CQRS(쿼리 책임 분리) 명령을 수행하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2400967

문제

나는 다음과 같은 내용을 읽었습니다. CQRS(명령 쿼리 책임 분리).이것이 ASP.NET MVC에서 어떻게 작동하는지 궁금합니다.CQRS에 대한 아이디어는 개념적으로 훌륭해 보이지만 확실히 "정상/공통" 접근 방식에 비해 약간의 복잡성(이벤트 및 메시징 패턴)이 발생합니다.또한 어떤 면에서는 ORM 사용에 반대되는 CQRS 아이디어도 있습니다.앞으로의 프로젝트에서 이 패턴을 어떻게 사용할 수 있을지 생각 중입니다. 누군가 CQRS를 ASP.NET MVC 및 NHibernate와 결합한 경험이 있다면 CQRS를 더 잘 이해하고 ASP.NET MVC와 함께 사용하는 데 도움이 되는 몇 가지 구체적인 예를 제공해 주세요.감사해요!

업데이트됨:나는 Mark의 샘플 코드를 살펴보았습니다.CQRS를 배우고 있다면 꼭 읽어야 할 책입니다.

http://github.com/MarkNijhof/Fohjin

http://cre8ivethought.com/blog/2009/11/12/cqrs--la-greg-young/

http://cre8ivethought.com/blog/2009/11/28/cqrs-trying-to-make-it-re-usable/

도움이 되었습니까?

해결책

Cqrs를 사용하면 웹 프로젝트가 훨씬 쉬워집니다.GET 사이트에서 모든 쿼리는 "id = @ID 테이블에서 선택 * *)처럼 보입니다.이러한 간단한 쿼리의 경우 NHiberante와 같은 orm이 필요하지 않습니다.SQL 데이터베이스를 사용할 필요는 없으며, 원할 경우 개체를 데이터베이스 테이블에 직렬화하거나 명명 규칙을 사용할 수 있습니다.여전히 NHibernate로 읽기 데이터베이스를 쿼리할 수 있지만 모든 쿼리가 동일하기 때문에 아무 이점도 얻지 못할 것입니다.

public class Controller
{
  public ActionResult Get(Guid id)
  {
     var viewModel = reportingDatabase.Get(id);
     return View(viewmodel);
  }
}

명령 측에서 컨트롤러는 다음과 같습니다.

public class Controller
{
  public ActionResult Post(SomeForm form)
  {
    // do validation
    var command = new SomeCommand(form.Property1, form.Property2);
    bus.Send(command);
    return redirecto(something else);
  }
}

컨트롤러는 메시지만 보낼 뿐 메시지가 어디로 가는지, 메시지의 결과가 무엇인지 알 수 없습니다.이것의 mvc 부분은 프로그래밍이 매우 간단합니다.Cqrs는 애플리케이션의 웹 파트 작성을 매우 지루하게 만들지만 사용자가 결정을 내리는 데 도움이 되는 일부 코드를 추가하면(선택적으로 ajax에서 사용하는 json 반환) 더 재미있게 만들 수 있습니다.

다른 팁

내 것을보세요 dddsample.net CodePlex에 프로젝트. GUI는 ASP.NET MVC를 사용하여 구현되며 비즈니스 로직은 4 가지 변형으로 DDD를 사용합니다.

  • 클래식 (CQR 없음)
  • 두 개의 nhibernate 관계형 데이터 저장소가있는 CQR
  • 보고 측면에서 LINQ에서 SQL이있는 CQR
  • 명령 측에 이벤트 소싱이있는 CQR

그리고 내 시도를 살펴보십시오 http://agrcqrs.codeplex.com, ASP.NET MVC + NHIBERNATE입니다

다음은 내가 쓴 완전한 예입니다 내 cqrs lib scritchy:

CQRS 앱을 사용하여 생성합니다 스크리처 너트 패키지 매우 간단하고 몇 분 안에 당신을 올리게합니다

다음 게시물에서 흥미로운 리소스를 찾을 수 있습니다. CQRS를 프로젝트에 적응시키는 방법

내가 특히 흥미로운 것을 발견 한 것은 CQRS 여행, Microsoft에서. Windows Azure의 의존성에 대해 실망스러워 보일 수 있지만 기다릴 수 있습니다. SQL Server에서 이벤트 스토어 및 엔터프라이즈 서비스 버스를 아주 잘 구현했습니다. Demo App 소스 코드에서 제작에서 SQL 구현을 사용하는 것에 대해 경고하는 데모 앱 소스 코드에서 많은 의견을 찾을 수 있습니다. 그러나 몇 가지 조정으로 프로젝트에 적응할 수 있습니다. 나는 그것을했고 그것은 매우 잘 작동합니다.

이 코드는 깨끗합니다 (Microsoft 패턴 및 관행의 사람들에서 나온 것입니다). 간단하지만 효과적인 엔터프라이즈 서비스 버스 (SQL Server 및 Ado.net, 병렬 스레드 포함), 엔터티 프레임 워크가있는 읽기 모델 등의 종속성 주입 (Unity)을 사용하는 방법에 대한 좋은 예를 찾을 수 있습니다. CQRS와 이벤트 소싱을하는 방법을 배웠습니다 ... 기억하십시오 : 이벤트에 관한 모든 것이 이벤트

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top