有关接口实现和可扩展性的架构问题

时间:2010-12-13 23:02:20

标签: c# design-patterns architecture mvvm

我已经创建了一个示例应用,只是为了测试并尝试一些wpf的功能。我基本上是在wpf中尝试数据绑定,并且或多或少地做了其他的事情。

基本上,我有一个接口,它有一个执行一些后台工作的方法,然后返回一个对象列表 interfaced看起来像这样:

public interface IWorker<T>
{
    IEnumerable<T> DoWork();
}

我创建了该接口的实现,并使用Unity和一些初始化,我将它注入到我的viewmodel中。为了清楚起见,我会跳过DI,我会直接转到viewmodel。 Offer是一种对象,Offers是通过MainViewModel的属性绑定到网格的ObservableCollection。

public MainViewModel(IWorker<Offer> worker)
        {
            InitViewModel();

            _currentDispatcher = Dispatcher.CurrentDispatcher;

            Action<Offer> addOFfer = (item) => { Offers.Add(item); };
            Action<IWorker<Offer>> createOffers = (createOffers ) =>
            {


                    foreach (var item in createOffers.DoWork())
                    {
                        _currentDispatcher.BeginInvoke(DispatcherPriority.DataBind, addOFfer, item);
                    }

            };

            DoWorkCommand = new RelayCommand(() =>
                {
                    _currentDispatcher.Invoke(DispatcherPriority.Background, createOffers, worker);                    
                });
        }

到目前为止一切顺利。我有一个命令绑定到一个按钮,当我们点击它时,按钮调用工作器,它创建了一堆对象,并将它们放在observablecollection中,因此数据绑定是自动的。这很好用 我的问题是...... 现在我想创建IWorker接口的新实现,并能够通过不同的命令从同一视图中使用它(比如让Button1分别调用SpecificWorker1,Button2分别调用SpecificWorker2实现)。有没有办法在不改变架构的情况下做到这一点?如果是这样,那么变化应该是什么?是不是可能,或者不是一个好的方法同时拥有多个服务实现?

0 个答案:

没有答案