Я создал пример приложения, просто чтобы протестировать и опробовать некоторые возможности wpf.Я в основном пробовал привязку данных в wpf и делал все остальное более или менее быстро.Затем я столкнулся с архитектурной проблемой (да, нужно было подумать заранее, прежде чем начинать кодировать :)), и я хотел знать, какое решение для рефакторинга лучше для него.
У меня есть простой интерфейс, который возвращает списокобъекты, основанные на определенном процессе.
public interface IDoStuff<out T>
{
IEnumerable<T> Do(string someParam);
}
Я создал несколько реализаций для этого интерфейса.Затем у меня есть представление в wpf, которое имеет раскрывающийся список с жестко закодированными значениями, и в зависимости от того, что вы выбираете, устанавливает реализацию интерфейса и заполняет некоторый список
foreach (var item in new IDoSTuffImplementation1()<MyObj>.Do("imp 1"))
{
MyObjs.Add(item);
}
ater на MyObjs - это DataContext дляlistview, и отображает вещи и так далее, и так далее, но это вне основного вопроса.
это все жестко закодировано и не очень приятно.Если бы мне нужно было реализовать новый интерфейс, мне нужно было бы добавить его в выпадающий список и создать новый foreach для этой конкретной реализации (более продублированный код)
Хорошо, вот мое впечатление, как сделать это лучше/ рефакторинг для расширяемости.Я думал, что хорошим подходом было бы использование некоторого шаблона MVVM, превращающего представление wpf в view + viewmodel.viewmodel будет использовать какой-то IoC, такой как spring, который (xml) создаст одну конкретную реализацию интерфейса и внедрит ее в viewmodel, которая затем вызовет метод «Do», и все будут счастливы.Таким образом, единственное, что нужно будет сделать, когда мы реализуем новый компонент, - это добавить его в файл конфигурации xml.Предложения, комментарии?Каков наилучший подход, если таковой имеется?спасибо !!