私はいくつかのカスタムフォーム要素を含むFormクラスを持っています。DTOを使用しないで.NET Activator.CreateInstanceを使用する
私は要素の特定の属性を提供するEntityオブジェクトを持っています。これらはXMLファイルから解析されます。すべての要素は、コンストラクタ内でパラメータとしてエンティティを取得しますが、その後はそのコンストラクタで異なるパラメータを必要とします。
私は現在、以下のようにswitch文を使用しています。しかし、これをActivator.CreateInstanceを使用するように変換したいと思います。しかし、コンストラクタ内のパラメータが異なると、これを処理するための唯一の方法は、すべてのパラメータを含むDTOを作成し、コンストラクタに渡し、各コンストラクタに必要な情報を要求させることです。 DTOが現代のインプリメントで欲しがるのではないかと私は理解しているので、私は代わりをしたい。
switch (entity.GetPropertyValue("Class"))
{
case "FormCheckBox":
newElement = new FormCheckBox(entity, BaseElementHeight);
break;
case "RowSeparator":
newElement = new RowSeperator(entity, RowHeight, _mainCanvas);
break;
case "FormLabel":
newElement = new FormLabel(entity, BaseElementHeight);
break;
case "FormEditBox":
newElement = new FormEditBox(entity, _mainCanvas);//, BaseElementHeight, 600);
break;
case "FormComboBox":
newElement = new FormComboBox(entity, BaseElementHeight);
break;
case "FormTextBox":
newElement = new FormTextBox(entity, BaseElementHeight, TextFontSize, MaxFontBoxSize);
break;
default:
return null;
}
これについての考えやアイデアはありますか?
あなたの最初の陳述を詳しくお聞かせください。あなたの2番目のステートメントに関して、私のエンティティはUIコードを持っていません。実際、私のエンティティは実際には自分のデータと他のエンティティとの関係についてのみ知っています。私のエンティティクラスの一般的なメソッドはGetPropertyValueを呼び出します。これはXMLのGetAttributeに似ています。私のUIであるフォーム要素の内部では、エンティティ参照を受け入れ、それを照会して、レンダリングして正しく動作させるために知る必要のある情報を見つけます。 – WPFNewbie
「ビジターパターン」がより適切かもしれませんが、同じ概念が適用されます。エンティティをUIの外に保つ。 –
ありがとうございます。私の場合、フォーム要素のいくつかは、エンティティのプロパティを最大20個までアクセスする必要があります。エンティティには、検証タイプ、入力マスク、必須、最大num文字、最小num文字、読み取り専用などのデータを含めることができます。私はここでDTOが適切かもしれないと思う。また、消費するフォームによって決まる、高さなどのエンティティプロパティではない、渡されなければならないパラメータもあります。 – WPFNewbie