【发布时间】:2011-07-02 23:49:25
【问题描述】:
在我当前的项目中,有一些组件/库被设计为适配器。
例如,一个适配器封装了对文件系统的 IO 访问。
在实际的异常处理设计中,适配器必须抛出特定的异常,例如FileSystemFileNotFoundException。
适配器特定异常必须从适配器基本异常派生。
主要原因是开发人员有一个相对好的方法来捕获所有适配器特定的异常。
有时基本异常会提供附加信息,如果是 IO 适配器,源文件和目标文件属性包含每个文件的完整路径和文件名。
主应用程序有三个不同场景的三个自己的基础异常。
有几个从主应用程序调用的适配器。
现在每个适配器在主应用程序中都需要自己的异常映射逻辑。
从适配器映射到应用程序异常类型,对附加异常信息做一些工作等等。
目前需要以下代码将源与目标异常进行映射
var map = new Dictionary<Type, Type>()
{ typeof(FileAlreadyExistsTechnicalException) } };
var fileSystemAdapterException = ex as FileSystemAdapterBaseException;
if (fileSystemAdapterException != null)
{
var exception = from mapping in map
where mapping.Key.Equals(fileSystemAdapterException.GetType())
select mapping.Value;
var baseTechnicalException = (TechnicalException)Activator.CreateInstance(exception.Single());
baseTechnicalException.AddPlaceholderEntry(ExceptionPlaceholderConstants.File, fileSystemAdapterException.SourceFile);
resultException = baseTechnicalException;
}
return resultException;
1.) 这是一个好的设计吗?
2.) 如何推广这种映射?
我首先想到了AutoMapper,但他能给我在附加信息上做一些额外工作的可能性吗?
【问题讨论】:
标签: architecture exception-handling mapping automapper