1

这在某种程度上是一个设计问题。我正在使用装饰器模式来处理横切关注点。这些担忧之一是验证。我见过的大多数例子都是这样的:

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

验证器的实现类似于:

if (!IsValid)
    throw new NotValidException();

过于简单,但希望你能明白。

我的印象是这是不好的做法(我可能是错的,这真的是我问题的核心 - 这是不好的做法吗?)这个案例并不是一个例外。这是一个相当典型且可以理解的用户输入错误。

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

想法?

4

1 回答 1

1

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

我强烈推荐 Erip Lippert 关于这个话题的不朽话语:http: //blogs.msdn.com/b/ericlippert/archive/2008/09/10/vexing-exceptions.aspx

于 2013-08-05T16:30:40.187 回答