我目前正在设计一个处理不同类型文件的系统。我已经定义了以下接口可以处理错误的组件的异常或返回状态
public interface IFileProcessor
{
bool ProcessFile(string fileContents)
}
目的是创建一些具体的实现来处理不同的文件类型。控制器类将负责:
- 看一个文件夹中新添加的文件
- 一个呼叫ProcessFile(读取文件内容
- 获得这些IFileProcessor具体实现
- 一个集合)传递文件内容
- 如果某个组件无法处理该文件,则返回false,否则将处理该内容并返回true
- 如果没有IFileProcesso r实现可以将它由控制器移动到“未处理”文件夹的文件
- 如果某个组件成功处理该文件,则该文件将被移动到“已处理”文件夹中
- 如果某个组件抛出异常,移动到“失败”文件夹
我创造IFileProcessor的实现将首先检查它是否可以根据类型处理该文件(即csv),然后执行一些顶级验证(即校验文件头)。如果这些检查中的任何一个检查失败,将抛出控制器的异常,因为整个文件被视为无效。
但是,一旦顶级验证成功,组件将处理文件中的每一行。从这一点开始,一条生产线可能无法处理(即验证),并且其余的过程继续进行。
这是问题出在哪里,我想知道是否最好记录发生了验证错误,然后在进程结束时抛出异常,或者更改ProcessFile()签名以返回枚举(一个已处理的,未处理的,已处理的错误)?
从我看过的文章看来,异常是状态代码的首选路线,但是在这种特殊的情况下,一个进程可以继续下去,在最后使用一个人为的异常来声明进程没有完成似乎是错误的100 %。
我会真正感兴趣的人民对此的想法。
不要过度设计这个。当文件出现问题时,你需要一个人来采取行动。没有什么有意义的事情可以做,它可以是好的或不可用的。只要确保这个人有一个清晰的诊断看看。 –
嗨汉斯,在这种情况下的要求是,组件必须处理它的一切。文件中的每一行都会经过验证过程,检查该行中的引用是否为我们的系统所知。如果已知该参考线,则处理线,否则将记录验证错误以供稍后进一步检查。 – watsite