Архитектурный вопрос о реализации и расширяемости интерфейсов - PullRequest
2 голосов
/ 13 декабря 2010

Я создал пример приложения, просто чтобы протестировать и опробовать некоторые возможности 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.Предложения, комментарии?Каков наилучший подход, если таковой имеется?спасибо !!

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

На самом деле я не вижу каких-либо изменений в архитектуре, если вы предоставите другую реализацию интерфейса.У вас уже есть хорошая архитектура при использовании MVVM, поэтому задача, которую вы пытаетесь выполнить, не изменит архитектуру, а расширит ваше приложение, используя архитектуру.

0 голосов
/ 13 декабря 2010

Я предлагаю вам заменить Method на Property.И присвойте это свойство ComboBox ItemsSource свойству, чтобы упростить кодирование с помощью привязки данных.

...