wpfの機能のいくつかをテストして試してみるために、サンプルアプリケーションを作成しました。私は基本的にwpfでデータバインディングを試していましたが、残りの部分は多かれ少なかれ迅速に処理しました。その後、私はarquitecturalの問題に直面しました(はい、コーディングを開始する前に事前に考えていたはずです)。そして、私はそれに対して最高のリファクタリングソリューションが何かを知りたいと思っていました。インタフェースの実装と拡張性に関するアーキテクチャ上の質問
私は定義されたプロセスに基づいてオブジェクトのリストを返す単純なインターフェースを持っています。
public interface IDoStuff<out T>
{
IEnumerable<T> Do(string someParam);
}
私はこのインターフェイス用に2つの実装を作成しました。それから私はMYOBJSにATER
foreach (var item in new IDoSTuffImplementation1()<MyObj>.Do("imp 1"))
{
MyObjs.Add(item);
}
をハードコードされた値とドロップダウンを持っているWPFのビューを持っている、とあなたが選択した内容に応じて、インタフェースの実装をinstatiatesといくつかのリストを移入し、リストビューのためのDataContextです物事などを表示しますが、主な質問からは外れています。
これはすべてハードコードされており、あまりうまくありません。私は新しいインターフェイスを実装する必要があった場合は、ドロップダウンリストに追加して、その特定の実装(新しいコードを複写する)のために新しいforeachを作成する必要があります
これは良い/拡張性のために。 wpfビューをview + viewmodelにして、ある種のMVVMパターンを使用するのが良いアプローチだと思っていました。 viewmodelは、(xmlによって)インターフェイスの特定の実装をインスタンス化し、それをviewmodelに注入して、その "Do"メソッドと誰もが幸せになるという春のような何らかのIoCを使用します。このように、新しいコンポーネントを実装するときに唯一必要となるのは、xml configファイルに追加することだけです。 提案、コメント?もしあれば、最善のアプローチは何ですか? ありがとうございます!
これは本当に多くの助けにはならない、私の主な質問は、アーキテクチャ(と提案されたエンハンスメント)、データバインディングを作成する方法ではないと見なされます。 –
MVVMについて言及したので、私はあなたに 'Method'の代わりに' Property'を使うことを提案しました。 MVVMは、「通知」、「データバインディング」、「コマンド」に基づいています。 'IoC'として' Unity'や 'MEF'を使います。 – decyclone