Backend
Rust 服务边界:让类型替你拒绝坏状态
服务层并不是 DTO 的搬运工,它应该是业务不变量的守门人。
·1 分钟阅读#Rust#Backend#Engineering
把校验放在边界,不是为了让代码看起来更严谨,而是为了避免无效状态穿过系统。
新类型比约定可靠
如果一个字符串只能是邮箱地址,就让它成为邮箱地址,而不是在每个调用点反复祈祷。
pub struct Email(String);
impl TryFrom<String> for Email {
type Error = ValidationError;
fn try_from(value: String) -> Result<Self, Self::Error> {
value.contains('@').then_some(Self(value)).ok_or(ValidationError::Email)
}
}类型不是业务的全部,但它能把一整类错误从运行时提前到编译期或入口处。