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)
    }
}

类型不是业务的全部,但它能把一整类错误从运行时提前到编译期或入口处。