гоферский поэтому заранее простите если приношу дурные паттерны в чужой монастырь)
В голову пришла такая каракатица:
pub trait UserRepo {
fn store_user(&mut self, u: &User) -> Result<(), Box<dyn Error>>;
}
pub struct CmdRegisterUser {
pub username: String,
}
pub struct RegisterUserHandler<T> {
pub repo: T,
}
impl<T: UserRepo> RegisterUserHandler<T> {
pub fn handle(&mut self, cmd: &CmdRegisterUser) -> Result<(), Box<dyn Error>> {
let user = User::new(&cmd.username);
self.repo.store_user(&user)
}
}
Финальный сервис буду собирать из набора command + query обработчиков которым надо получить конкретные реализации разных репозиториев (User .. Etc).
Дженерики vs &dyn Trait и какие подводные камни встретятся, если кто то уже подобное строил?
Пойди от обратного, если у тебя есть финальный сервис который что-то использует сперва опиши трейт который получает необходимый тебе скоуп данных
Репозиторий он и в Африке репозиторий
ну все как обычно
полунин писал вроде DI либу для актикса. Не знаю в каком она состоянии, вроде работало что-ток огда я смотрел
вот тоже на нее смотрел чтоб внутрянку почитать, но в конечном итоге оно все равно сведется либо к trait object либо через дженерики. да и на текущем этапе не очень хочу приносить сразу целые фреймворки. это игрушечный проект без сроков где есть свобода на практике раст поучить)
Ну я фигачил через extension на актиксе
Обсуждают сегодня