列挙型 (ドメイン層に含まれる) をポリモーフィック クラスにリファクタリングする場合、リファクタリングするすべての switch および if ステートメントが他の層 (これは、ドメイン層内でこれらの層を参照することになる可能性があるためです。
public abstract class MyRefactoredEnum
{
public abstract void DoSomething(IBusinnessObject aBizObject); //dependency to the biz. layer
public abstract MvcHtmlString GetImgTag(); //dependency to presentation layer
}
(上記の例では、「相互参照」の問題も発生する可能性があります)
ビジター パターン ( http://en.wikipedia.org/wiki/Visitor_pattern ) がこの問題の有効な解決策であることがわかりました。ドメイン レイヤーでは MyRefactoredEnum.IVisitor インターフェースのみを定義し、他のすべてのレイヤーは独自の訪問者を実装します。
唯一の問題: MyRefactoredEnum.IVisitor インターフェイスを変更する場合 (たとえば、別の MyRefactoredEnum のサブクラスを追加したため)、ドメイン モデルを参照するすべてのプロジェクトとソリューションを変更して再コンパイルする必要があります。リフレクション ( http://surguy.net/articles/visitor-with-reflection.xml ) を使用して問題を解決できますが、遅くなる可能性があります...
列挙型をリファクタリングするためのより良いパターンはありますか?
PS: 私のひどい英語でごめんなさい :)