c# - 错误处理 : Exceptions vs Error method

标签 c# oop error-handling 3-tier

我正在创建一个 3 层应用程序,但在处理错误时遇到了问题。我不知道我是否应该抛出异常或调用方法将问题传达给其他层。

这是一个简单的例子,我有:
- 允许用户在列表中选择文件的 FileChooserFrame(表示层)。
- 一个 DataHandler(应用层),它对文件的路径做一些事情,并在表示层和数据层之间建立链接。
- 解析文件并从中获取数据的 FileParser(数据层)。

现在假设文件必须遵循特殊结构,如果不是,我想显示一个 MessageBox。
我无法知道用户在解析之前是否选择了一个好的文件。

我的问题是,当我发现文件不符合结构时我该怎么办?
我想到了两件事:
1 - 停止当前操作并调用 DataHandler 中的方法(例如 NotifyWrongFileErr()),该方法将要求框架显示消息框。
2 - 抛出一个我在 FileChooserFrame 中捕获的自定义异常,它将显示弹出窗口。

这两种情况各有利弊,所以我无法在它们之间做出选择。最合适的做法是什么?

PS:如果是第 2 种情况,我应该在哪里编写 Exception 类?在专用于应用异常的文件中,还是在将抛出异常的类旁边?

最佳答案

好吧,这是您的选择,异常的最佳实践通常是仅在您没有预料到的情况下抛出异常。由于您希望某人能够选择无效的文件名,因此调用该方法可能被认为是“最佳实践”。但还是那句话,没有对错之分,做自己喜欢的事,只要自己开心就好。如果是我,我会为这样的事情创建一组数据层异常并抛出它们,如果我想使用一些测试代码 (IoC) 测试数据层,我会看到异常。

关于c# - 错误处理 : Exceptions vs Error method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16671581/

相关文章:

php - 依赖倒置和接口(interface)

java 对象 - 公共(public)行为与静态行为

c - 我的程序需要能够处理SIGINT吗?

php - 通知用户有关 codeigniter 中的成功更新

node.js - aws ubuntu上的 Node 错误但不是OSX

c# - 在 Razor MVC3 中使用 ViewModel 在单个 View 中显示多个模型( View 中只有详细信息)

C# SQL命令获取某个元素出现在xml索引中的计数

c# - 如果字节是 8 位整数,那么我们如何将它设置为 255?

c# - 如何为 C# 配置 Eclipse

php - 获取实例的静态属性