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

时间:2010-12-13 09:47:04

标签: c# design-patterns architecture mvvm

我已经创建了一个示例应用,只是为了测试并尝试一些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);
}
MyObjs上的ater是listview的DataContext,显示事物等等,但它不属于主要问题。

这都是硬编码而且不是很好。如果我要实现一个新的接口,我需要将它添加到下拉列表中,并为该特定实现创建一个新的foreach(更多重复的代码)

好的,这是我对使其更好/重构以实现可扩展性的印象。 我认为一个好的方法是使用某种MVVM模式,使wpf视图成为view + viewmodel。 viewmodel会像spring一样使用某种类型的IoC,它会(通过xml)实例化接口的一个特定实现,并将其注入viewmodel,然后调用它的“Do”方法,每个人都开心。所以这样,我们实现新组件时唯一需要做的就是将它添加到xml配置文件中。 建议,评论?什么是最好的方法,如果有的话? 谢谢!

2 个答案:

答案 0 :(得分:1)

实际上,如果您提供该接口的另一个实现,我看不到任何架构更改。在使用MVVM时,您已经拥有了良好的架构,因此您尝试完成的任务不会改变架构,但会使用架构扩展您的应用程序。

答案 1 :(得分:0)

我建议您将Method更改为Property。并将该属性分配给ComboBox的{​​{1}}属性,以便使用数据绑定来简化编码。