我有一个三层 C# 软件:UI、业务、数据库。
我有一些业务规则要实施到我的业务层中。例如,如果两个对象具有相同的名称,则业务层需要向 UI 抛出异常。
我的问题是我的应用程序是多语言的,而我的业务层无权访问我的资源文件。所以我的 UI 需要从业务层捕获异常,并决定它将向用户显示什么消息。
我正在考虑创建一个 BusinessException 类,其属性告诉 UI 在资源文件中采用哪个键。你认为这是一个好方法吗?或者你有更好的想法?谢谢!
我有一个三层 C# 软件:UI、业务、数据库。
我有一些业务规则要实施到我的业务层中。例如,如果两个对象具有相同的名称,则业务层需要向 UI 抛出异常。
我的问题是我的应用程序是多语言的,而我的业务层无权访问我的资源文件。所以我的 UI 需要从业务层捕获异常,并决定它将向用户显示什么消息。
我正在考虑创建一个 BusinessException 类,其属性告诉 UI 在资源文件中采用哪个键。你认为这是一个好方法吗?或者你有更好的想法?谢谢!
首选的解决方案是创建表示不同错误的不同异常类型,将任何重要数据作为属性添加到异常中,并让 UI 处理用户面临的错误消息。
如果您有一个单独的 UI 设计团队想要处理向用户显示的文本,包括错误消息,这是理想的选择。坦率地说,开发人员倾向于为其他开发人员而不是为用户编写好的错误消息。
否则,在 UI 可以查找的异常中嵌入某种形式的消息 ID(如您的建议)或本地化业务层中的错误消息。
我最终得到了这两种解决方案的混合。所以我只使用一个类:BusinessRuleException。此类作为属性“规则”,它是我所有业务规则的枚举。
当我的 UI 收到 BusinessRuleException 时,它可以捕获它,然后将“规则”与资源文件进行比较,并为用户获取友好的消息。如果 UI 找不到翻译,它只会按原样发送规则。所以用户仍然有一个变化来了解发生了什么。
它不喜欢为每个不同的业务规则提供不同异常的解决方案,因为它最终会产生如此多的额外代码,这无助于您了解您的班级正在做的真正工作是什么。