Typescript中处理错误的最佳实践



由于我读了一些关于错误处理的文章,我仍然想知道在值对象中的验证逻辑上抛出异常是否是一种不好的方式。例如,下面这个类是值对象:

export class UserName {
private readonly value: string;
constructor(value: string) {
this.value = this.evaluateName(value);
}
private evaluateName(value: string): string {
value = value.trim();
if (value === "") {
throw new UserNameError("username is required!");
}
return value;
}
static userNameOf(name: string): UserName {
return new UserName(name);
}
public isValidName(): boolean {
if (!/^[a-zA-Z]+$/.test(this.value)) {
throw new UserNameError("user name should contain only letter");
}
return true;
}
}
那么,如果有最好的方法来处理错误,而不是像我那样抛出错误呢?谢谢:)

使用值对象的好处之一是它们可以强制执行自己的不变量。遵循"永远有效"的原则是个好主意。该原则意味着实体、聚合根和值对象永远不会处于违反其不变量的状态。

因此,从值对象抛出异常是没有问题的。事实上,在你的例子中,它应该更严格。当前,您可以创建一个Username值对象,该对象将无法通过isValidName()测试,因为它在构造完成之前没有进行检查。

我会这样重构:

export class UserName {
private readonly value: string;
constructor(value: string) {
trimmed: string;
trimmed = value.trim();

if (trimmed === "") {
throw new UserNameError("Username is required!.");
}
if (!/^[a-zA-Z]+$/.test(trimmed)) {
throw new UserNameError("user name should contain only letter");
}    
this.value = trimmed;
}
static userNameOf(name: string): UserName {
return new UserName(name);
}
}

最新更新