我应该在装饰器模式中引发异常以处理验证吗?

普莱斯·琼斯

这有点是设计问题。我正在使用装饰器模式来处理横切关注点。这些问题之一是验证。我看到的大多数示例都执行以下操作:

IAccount account = new AccountValidator(new Account());
account.Deposit();

验证器的实现类似于:

if (!IsValid)
    throw new NotValidException();

过于简单化,但希望您能理解。

我给人的印象是这是一种不好的做法(我可能错了,这实际上是我的问题的核心-这是不好的做法吗?)这种情况并不是一个例外。这是一个非常典型且可以理解的用户输入错误。

但是,我知道如何避免这种情况的唯一方法是设计我的所有服务方法,以返回某种包含响应数据的标准化对象。因此,例如account.Deposit()返回一个IResponse,它由许多可能的类实现,例如NotValidResponse:IResponse ...

有什么想法吗?

海尼

异常不应用于控制数据流;它们应在特殊情况下使用。我建议您返回您描述的某种Result对象,或者返回布尔值,否则返回。您不应该使用异常来确定应用程序的行为:对于必须维护您的代码的其他程序员而言,异常是昂贵且不直观的。

我强烈推荐埃里普·利珀特(Erip Lippert)关于这个主题的不朽词汇:http : //blogs.msdn.com/b/ericlippert/archive/2008/09/10/vexing-exceptions.aspx

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我应该在构造函数中引发异常吗

我应该在模型中抛出HttpStatus异常吗?

我应该在构造函数中验证参数吗?

我应该在ES7装饰器后面加上分号吗?

是否应该在try-except中包含验证功能并重新引发异常?

我应该在程序中引发异常还是打印出错误声明?

我应该在.Net Web Api 2中返回状态码还是引发异常

服务跟踪器 | 如果出现异常,我们应该在addingService方法中释放服务吗?

我应该在Kotlin中使用Closable.use {...}处理异常吗?

我应该如何处理@jwt_required装饰器中引发的异常?(在flask-jwt-extended中)

如何在装饰器模式中处理“此”引用

我应该在DTO中使用构建器模式吗?

我应该在End_Request事件处理程序中处理给定的ApplicationDbContext吗?

我应该在我的MVC层和服务层中重复验证吗?

我应该在UEFI模式下安装Ubuntu吗?

(C#)我应该在计算中注意无穷大/无穷大吗?即引发溢出异常?

我应该在班级中包装班级自定义异常吗?

我应该在 Axon 的同一个包中声明异常吗?

我应该在API或BL层中验证输入吗?

我应该在动作创建者中处理错误吗

即使在用户未提供要插入的数据的情况下,我也应该在数据库中插入数据时包括异常处理吗?

在装饰器中捕获异常

在装饰器模式中实现委派

我应该在静态字段中缓存比较器吗?

我应该在C#中通过属性设置器分配类字段吗?

我应该在多侦听器方案中实现同步吗?

在python装饰器中引发异常是一个好的模式吗?

我应该在virtualenv中pip install python吗?

我应该在备份中包含/ dev吗?