我有一个用于实现“输出格式化程序”的接口,看起来有点像这样:
public interface IFormatOutput {}
public class HtmlOutputFormatter : IFormatOutput {}
public class TextOutputFormatter : IFormatOutput {}
// etc, etc...
public enum OutputFormat {
Html,
Text,
HappyMeal,
Excel
}
public class SomeFormattableEntity {
int Id { get; set; }
OutputFormat OutputType { get; set; }
}
SoSomeFormattableEntity
通过 Dapper 保存在数据库中,其OutputType
属性存储为底层整数值(即,在INT
列中)。你可以猜到,我想提供一个 a 的实例来根据它的属性IFormatOutput
来处理 a 。SomeFormattableEntity
OutputType
是否有一些干净的最佳实践方法来处理这种类型的关系?到目前为止,我的想法包括一个工厂,其内部可能包括:
- 爷爷的可怕丑陋开关声明
- 将枚举值映射到类型的数组
- 基于反射的魔术映射枚举成员名称作为字符串到其他地方的类类型
- 一些涉及属性的映射机制
我意识到要求类型基于值的事物的实例是不可取的,但是当涉及 SQL 时似乎很难避免这种情况。基本上问题是多个具有不同 .NET 类型的“事物”都存储在一个表中。我一直遇到这个成语,无法找到一个优雅的解决方案。