CQRS ?

Đây là 1 pattern được viết tắt vày Commvà Query Responsibility Segregation, dịch nôm mãng cầu là phân bóc tách sứ mệnh Comm& (bảo hộ mang lại bài toán ghi dữ liệu) cùng Query (thay thế đến việc hiểu dữ liệu). CQRS được miêu tả lần thứ nhất vày người sáng tác Greg Young.

Bạn đang xem: Event sourcing là gì

CQRS vs CQS Tương trường đoản cú với CQRS là pattern CQS (Commvà Query Separation) được trình làng vì chưng Bertrvà Meyer trong cuốn Object Oriented Software Construction. CQRS được coi nlỗi là 1 trong những không ngừng mở rộng của CQS. Có thể coi CQS bộc lộ ở tầm mức class hoặc component cấp độ còn CQRS thể hiện ngơi nghỉ bounded context cấp độ.

CQS hưởng thụ tách bóc biệt các method đến việc query hoặc writing cho 1 model: Query ko được chuyển đổi state, trong những khi Comm& được thay đổi state tuy nhiên không trả về 1 giá trị nào.

CQRS cũng có phát minh tương tự như tuy vậy cụ thể hơn. Một Query request đang tách biệt cùng với Command request. Một Query trả về data mà không chuyển đổi state của system, Commvà biến đổi system nhưng lại không trả về data. Sự khác biệt cơ phiên bản là trong quy mô CQRS, toàn bộ các object sẽ được tạo thành 2 object: 1 object đến Query với 1 object mang lại Commvà.

ON THE WAY TO CQRS

Để hiểu rõ hơn về phong cách thiết kế CQRS, ta đã bước đầu tự phong cách thiết kế truyền thống lâu đời (n-tier (layer) architecture). Trong phong cách thiết kế N-Tier layer, vấn đề biến hóa dữ liệu thường xuyên sử dụng CRUD (create, read, update và delete)

*

Nếu bọn họ mong muốn sửa phong cách thiết kế này theo nguyên tắc CQS thì chúng ta chỉ đơn giản và dễ dàng là tách kân hận Business logic thành Commands và Queries:

*

Nếu bạn đang đề xuất phân tách rõ 2 side Query với Command bên trên hệ thống với mã mối cung cấp vẫn dựng sẵn thì bước này chắc hẳn là bước khó khăn tốt nhất. Command: thực hiện commvà là phương thức độc nhất vô nhị để chuyển đổi state của khối hệ thống. Commvà Chịu trách nát nhiệm cho toàn bộ các đổi khác vào hệ thống. Nếu không có Commvà như thế nào xúc tiến, state của khối hệ thống đang không thay đổi. Thực thi Commvà không nên trả về bất kỳ quý giá gì. (Nên thực thi giống như thứ hạng void function) Query: là thực thi việc hiểu tài liệu. Nó gọi state của system và hoàn toàn có thể filter, aggregate với đổi khác khung data theo format mong muốn. Query bắt buộc trả về công dụng.

Tiếp tục trở lại bản vẽ xây dựng sinh hoạt trên, chúng ta cũng có thể thay đổi Model đổi mới Domain Model. Với Model, các bạn đọc được tập hòa hợp những data container trong những khi Domain Model đóng gói thành những nhiệm vụ tinh vi. Với câu hỏi chuyển đổi này, bạn cũng có thể dễ dàng nắm bắt Command Chịu trách rưới nhiệm cho Việc chuyển đổi state Một trong những nhiệm vụ tinh vi và buộc phải đặt ở Domain Model. Bên cạnh đó, chúng ta có thể thấy rõ rằng Domain Model cân xứng mang lại câu hỏi ghi tài liệu trong những khi nó không duy nhất thiết nên mang đến Việc hiểu tài liệu.

Xem thêm: Viettopcare Lừa Đảo Tinhte, (Đề Xuất) Làm Sao Để Biết Điện Thoại Bị Luộc Đồ

*

Tiếp theo, bạn có thể ánh xạ áp dụng READ Model cùng với ORM (Object Relational Mapping) với áp dụng nó để build những câu truy tìm vấn. Sử dụng ORM đã hữu dụng để đơn giản dễ dàng mô hình này.

*

Bây Giờ, sự việc là họ là vẫn có READ cùng WRITE Mã Sản Phẩm bóc tách biệt chỉ ở mức logic level cùng chúng vẫn sử dụng phổ biến database. Điều đó Tức là READ Model đơn giản chỉ là nút virtualized như DB Views, xuất sắc rộng hoàn toàn có thể là Materialized Views. Giải pháp này là OK nếu như hệ thống của bọn họ không tác động những vì chưng vụ việc performance.

Tiếp theo, chúng ta cũng có thể bóc biệt trọn vẹn Data Model. READ Model sẽ được update bởi những sự kiện Lúc WRITE Domain Model thực thi. Đến công đoạn này, chúng ta có thể Hotline xây dựng này là CQRS

*

CQRS != Event Sourcing

Cần rành mạch thân CQRS cùng Event Sourcing. Event Sourcing là 1 định nghĩa thường xuyên được thực hiện cùng với CQRS cùng nó rất có thể được khẳng định là 1 phần của CQRS. Ý tưởng của Event Sourcing vô cùng solo giản: Domain sẽ tạo ra các events (sẽ là những biến hóa của hệ thống). Nếu họ lấy tất cả những sự kiện từ thời điểm bắt đầu hệ thống và thực hiện lại tại tâm lý ban đầu thì bọn họ sẽ sở hữu được trạng thái hiện nay. lấy một ví dụ trong thực tiễn là lúc chúng ta msinh sống thông tin tài khoản tại bank, các thanh toán giao dịch (transaction) là những event. Lúc mngơi nghỉ tài khoản ban sơ thì tài khoản là 0 sau khoản thời gian bọn họ thực hiện toàn cục những sự kiện (transaction) thì chúng ta tài năng khoản bây chừ.

*

Trong Lúc Event Sourcing là cách thức kết quả nhằm lưu những tinh thần của khối hệ thống thì nó cũng không duy nhất thiết gồm trong mô hình CQRS. Trong quy mô CQRS, vấn đề thiết đặt tàng trữ Domain Model thực tiễn chỉ là một trong những tuỳ chọn.

Lợi ích của thực hiện event sourcing: – Kiểm tra được audit log – Có năng lực chế tạo query để tróc nã vấn history data – Decoupled side-effects – Hỗ trợ vấn đề troubleshooting và debuging.

Xem thêm: Asisten Pembaruan Windows 10 Download Crack Tinhte, Cập Nhật Windows 10

READ và WRITE model

WRITE model Trong vấn đề kiến tạo mô hình CQRS, câu hỏi tạo ra WRITE Model luôn luôn là phức tập nhất, hoàn toàn có thể coi WRITE Model như là trái tyên ổn của khối hệ thống. Tại kia tạo ra business decision đặc trưng. Nó xác minh trách nhiệm chủ yếu của phong cách thiết kế này là mô tả state thực của khối hệ thống, state có thể áp dụng nhằm tạo thành các ra quyết định đặc trưng.

READ Model Việc xử lý gọi dữ liệu đã thử khám phá họ phải sử dụng các truy vấn. Thông thường những query những tốn không ít time (rất có thể bởi vì áp dụng truy vấn vấn JOIN). Có nhiều phương pháp để đổi mới tốc độ tróc nã vấn (filter, giỏi tính toán thù trước tài liệu cần thiết,…). Tuy nhiên, thực tế kết quả duy nhất là áp dụng cache. Việc thực hiện cabịt tác dụng sẽ buộc phải lưu ý đến góc cạnh. “There are only two hard things in Computer Science: cabít invalidation and naming things. — Phil Karlton”


Chuyên mục: ĐỊNH NGHĨA
Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *