我已经创建了一个示例应用,只是为了测试并尝试一些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配置文件中。 建议,评论?什么是最好的方法,如果有的话? 谢谢!
答案 0 :(得分:1)
实际上,如果您提供该接口的另一个实现,我看不到任何架构更改。在使用MVVM时,您已经拥有了良好的架构,因此您尝试完成的任务不会改变架构,但会使用架构扩展您的应用程序。
答案 1 :(得分:0)
我建议您将Method
更改为Property
。并将该属性分配给ComboBox
的{{1}}属性,以便使用数据绑定来简化编码。