次のような「出力フォーマッタ」を実装するためのインターフェイスがあります。
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; }
}
したがってSomeFormattableEntity
、Dapperを介してデータベースに永続化され、そのOutputType
プロパティは基になる整数値として(つまり、INT
列に)格納されます。ご想像のとおり、プロパティに基づいてIFormatOutput
を処理するaのインスタンスを提供したいと思います。SomeFormattableEntity
OutputType
このタイプの関係を処理するためのクリーンなベストプラクティスの方法はありますか?これまでの私のアイデアには、次のもので構成される可能性のある内部を備えた工場が含まれています。
- おじいちゃんの恐ろしい醜いswitchステートメント
- 列挙値を型にマッピングする配列
- 他の場所のクラスタイプへの文字列としてのリフレクションベースのマジックマッピング列挙型メンバー名
- 属性を含むいくつかのマッピングメカニズム
タイプが値に基づくもののインスタンスを要求することは望ましくないことを私は理解していますが、SQLが関係している場合、これを回避するのは難しいようです。基本的に問題は、すべてがさまざまな.NETタイプを持つ複数の「モノ」が1つのテーブルに格納されることです。私はこのイディオムに出くわし続け、それに対するエレガントな解決策を見つけることができません。