3 个版本 (破坏性更新)
0.2.0 | 2024 年 3 月 17 日 |
---|---|
0.1.0 | 2024 年 3 月 3 日 |
0.0.1 | 2023 年 11 月 5 日 |
#15 in #cqrs
每月 234 次下载
7KB
127 行
基于 ioc 容器的 CQRS 提供者
通过提供者包装 kti_cqrs_rs 以支持更复杂的用法
简单示例(存在于仓库中)
pub struct UserController {
context: Arc<ContainerContext>,
}
impl UserController {
pub fn new(context: Arc<ContainerContext>) -> Self {
Self { context }
}
pub fn token() -> &'static str {
"USER_CONTROLLER"
}
pub async fn get_user_by_name(&self, name: &str) -> Result<Option<User>, Box<dyn Error>> {
let bus = self.get_cqrs_bus().await;
let query = GetUserByNameQuery::new(name);
bus.query(Box::new(query)).await
}
pub async fn create_user(&self, name: &str, email: &str) -> Result<(), Box<dyn Error>> {
let bus = self.get_cqrs_bus().await;
let command = CreateUserCommand::new(name, email);
bus.command(Box::new(command)).await;
Ok(())
}
pub async fn update_user(&self, name: &str, email: &str) -> Result<(), Box<dyn Error>> {
let bus = self.get_cqrs_bus().await;
let command = UpdateUserCommand::new(name, email);
bus.command(Box::new(command)).await;
Ok(())
}
async fn get_cqrs_bus(&self) -> cqrs_provider::Provider {
self
.context
.resolve_provider::<cqrs_provider::Provider>(cqrs_provider::Provider::token())
.await
}
}
依赖关系
~2.7–9.5MB
~75K SLoC