2011-12-22 14 views
0

私はいくつかのカスタムフォーム要素を含む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; 
     } 

これについての考えやアイデアはありますか?

答えて

0

ではなく、なぜこれを管理するためにcommand patternまたは double dispatch pattern を使用しないで、エンティティのCTORにすべてのものを注入。

エンティティをctor引数として渡す代わりに、プロパティを作成するか、必要なプロパティを渡すだけです。

new FormCheckBox 
{ 
    Height = BaseElementHeight, 
    Number = entity.Number, 
    Text = entity.Text 
    ... 
}; 

これは、エンティティをUIから完全に排除します。

+0

あなたの最初の陳述を詳しくお聞かせください。あなたの2番目のステートメントに関して、私のエンティティはUIコードを持っていません。実際、私のエンティティは実際には自分のデータと他のエンティティとの関係についてのみ知っています。私のエンティティクラスの一般的なメソッドはGetPropertyValueを呼び出します。これはXMLのGetAttributeに似ています。私のUIであるフォーム要素の内部では、エンティティ参照を受け入れ、それを照会して、レンダリングして正しく動作させるために知る必要のある情報を見つけます。 – WPFNewbie

+0

「ビジターパターン」がより適切かもしれませんが、同じ概念が適用されます。エンティティをUIの外に保つ。 –

+0

ありがとうございます。私の場合、フォーム要素のいくつかは、エンティティのプロパティを最大20個までアクセスする必要があります。エンティティには、検証タイプ、入力マスク、必須、最大num文字、最小num文字、読み取り専用などのデータを含めることができます。私はここでDTOが適切かもしれないと思う。また、消費するフォームによって決まる、高さなどのエンティティプロパティではない、渡されなければならないパラメータもあります。 – WPFNewbie

0

コンストラクタにパラメータを渡す必要がありますか?そうでない場合は、ネーミング規則(可能であれば表示)でオブジェクトを作成し、常に規約を使用してリフレクションによって各プロパティを設定することによってオブジェクトを作成することを提案します。 XMLの値は常に文字列であるため、Convert.ChangeType()で目的のプロパティの型に渡して、適切な作業割り当てを行うことをお勧めします。

+0

私たちはあなたが私たちに加わりたいと思っています。 –

関連する問題