2010-03-08 38 views
33

Tôi đã đọc khoảng Command Query Responsibility Segregation (CQRS). Tôi tự hỏi làm thế nào điều này sẽ làm việc với ASP.NET MVC? Tôi có ý tưởng về CQRS về mặt khái niệm, nó có vẻ đẹp và chắc chắn sẽ giới thiệu một số phức tạp (mẫu sự kiện và nhắn tin) so với cách tiếp cận "bình thường/phổ biến". Ngoài ra ý tưởng của CQRS loại chống lại việc sử dụng ORM theo một số cách. Tôi đang cố gắng nghĩ cách sử dụng mẫu này trong các dự án sắp tới nên nếu có ai có kinh nghiệm kết hợp CQRS với ASP.NET MVC và NHibernate, hãy đưa ra một số ví dụ cụ thể để giúp tôi hiểu rõ hơn về CQRS và sử dụng với ASP.NET MVC. Cảm ơn!Làm thế nào để phân biệt trách nhiệm truy vấn phân đoạn (CQRS) với ASP.NET MVC?

Đã cập nhật: Tôi đã trải qua mã mẫu của Mark. Đó là một phải đọc nếu bạn đang học 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/

Trả lời

18

Cqrs làm cho các dự án web dễ dàng hơn nhiều. Trên trang web nhận, tất cả các truy vấn sẽ trông giống như "chọn * từ bảng có id = @id"). Đối với những truy vấn đơn giản, bạn sẽ không cần một orm như NHiberante. Bạn không cần phải sử dụng một cơ sở dữ liệu sql, và khi bạn sẽ, bạn có thể tuần tự hóa đối tượng của bạn vào bảng cơ sở dữ liệu, hoặc sử dụng một quy ước đặt tên. Bạn vẫn có thể truy vấn cơ sở dữ liệu đọc bởi NHibernate, nhưng bạn sẽ không nhận được bất kỳ lợi thế nào từ nó, bởi vì tất cả các truy vấn của bạn sẽ giống nhau.

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

Về phía lệnh, các bộ điều khiển sẽ trông như thế này:

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); 
    } 
} 

Bộ điều khiển chỉ cần gửi một tin nhắn, và nó không biết nơi mà các thông điệp đi vào và những gì kết quả của tin nhắn là. Phần mvc này rất đơn giản để lập trình. Cqrs sẽ viết phần web của ứng dụng rất nhàm chán, nhưng bạn có thể làm cho nó thú vị hơn bằng cách thêm một số mã giúp người dùng đưa ra quyết định (tùy chọn trả về json được ajax sử dụng).

+11

Có vẻ đơn giản vì bạn không quan tâm đến kết quả lệnh của bạn, và bạn nên quan tâm đến các lệnh không thành công trong bất kỳ hệ thống nào. Không có trách nhiệm đối với mã luôn làm cho nó dễ dàng hơn. –

25

Hãy xem tại dự án DDDsample.Net tôi trên CodePlex. GUI được thực hiện sử dụng ASP.NET MVC trong khi logic kinh doanh sử dụng thông lệ DDD trong 4 biến thể khác nhau:

  • cổ điển (không CQRS)
  • CQRS với hai cửa hàng dữ liệu quan hệ NHibernate
  • CQRS với LINQ to SQL trên báo cáo bên
  • CQRS với tổ chức sự kiện Sourcing đứng về phía lệnh
+0

Cảm ơn các liên kết! – Jeff

0

Đây là một ví dụ hoàn chỉnh tôi đã viết cho my CQRS lib Scritchy:

Tạo ứng dụng CQRS bạn sử dụng the Scritchy nuget package là khá thẳng thắn và gets you up and running in a few minutes

0

Trong bài sau đây bạn có thể tìm thấy nguồn thú vị: How to adapt CQRS to projects

Người mà tôi tìm thấy đặc biệt thú vị là CQRS Journey, từ Microsoft. Nó có thể trông đáng thất vọng cho sự phụ thuộc của nó với Windows Azure, nhưng chờ đợi ... Nó có một thực hiện rất tốt đẹp của một cửa hàng sự kiện và dịch vụ doanh nghiệp xe buýt trong SQL Server. Bạn sẽ tìm thấy rất nhiều ý kiến ​​trong mã nguồn ứng dụng demo mà cảnh báo bạn chống lại bằng cách sử dụng thực hiện SQL trong sản xuất ... nhưng với một vài tinh chỉnh, bạn có thể điều chỉnh nó cho dự án của bạn. Tôi đã làm nó, và nó hoạt động rất, rất tốt.

Mã này sạch sẽ (đó là từ những người từ Mô hình và thực tiễn của Microsoft). Bạn sẽ tìm thấy một ví dụ tốt về cách sử dụng tiêm phụ thuộc (với Unity), một Bus Service Service đơn giản nhưng hiệu quả (với SQL Server và ADO.NET, với các luồng song song), một mô hình đọc với Entity Framework và nhiều hơn nữa. Tôi đã học được từ nó như thế nào để làm CQRS và tổ chức sự kiện Sourcing ... Hãy nhớ rằng: Tất cả của nó về sự kiện

Các vấn đề liên quan