3 个版本 (破坏性更新)
0.2.0 | 2024 年 3 月 16 日 |
---|---|
0.1.0 | 2024 年 3 月 3 日 |
0.0.1 | 2023 年 11 月 4 日 |
#16 in #cqrs
在 kti_cqrs_provider_rs 中使用
5KB
62 行
CQRS 模式在 Rust 中的实现
目前该包仅包含查询 & 命令处理器
简单示例(存在于仓库中)
#[cfg(test)]
mod tests {
use std::sync::Arc;
use kti_cqrs_rs::core::bus::{command_bus::CommandBus, query_bus::QueryBus};
use tokio::sync::Mutex;
use super::{
adapters::{
mutex_repository_adapter::MutexRepositoryAdapter, mutex_service_adapter::MutexServiceAdapter,
},
contexts::mutex_context::MutexContext,
ports::mutex_service_port::MutexServicePort,
};
fn create_service() -> Box<dyn MutexServicePort> {
let store = Arc::new(Mutex::new(vec![]));
let query_repository = Box::new(MutexRepositoryAdapter::new(store.clone()));
let command_repository = Box::new(MutexRepositoryAdapter::new(store));
Box::new(MutexServiceAdapter::new(
Arc::new(Mutex::new(MutexContext::new(
query_repository,
command_repository,
))),
CommandBus,
QueryBus,
))
}
#[tokio::test]
async fn should_be_empty_vector() {
let service = create_service();
let count = service.get_count().await.unwrap();
assert_eq!(count, 0);
}
#[tokio::test]
async fn should_be_one_element() {
let service = create_service();
service.add_element(1).await.unwrap();
let count = service.get_count().await.unwrap();
assert_eq!(count, 1);
}
#[tokio::test]
async fn should_be_empty_after_remove() {
let service = create_service();
service.add_element(1).await.unwrap();
service.remove_element(1).await.unwrap();
let count = service.get_count().await.unwrap();
assert_eq!(count, 0);
}
#[tokio::test]
async fn should_be_error_on_remove_not_existed_element() {
let service = create_service();
let res = service.remove_element(1).await;
assert!(res.is_err());
}
}
依赖项
~2.7–9.5MB
~76K SLoC