被动视图 - 查看特定逻辑

时间:2013-06-18 14:00:42

标签: c# listview design-patterns listbox passive-view

假设我想实现被动视图设计模式。我有一个包含列表框的视图(我将来可能会与listview或其他东西交换)。现在,使用被动视图应该使视图尽可能愚蠢。让我们说我想改变选择。我将把这个逻辑放在演示者中,因此我在views接口中添加了一个属性来获取和设置视图列表框的SelectedIndex属性。但是,如果我将来想要将listbox与listview交换,我会遇到麻烦,因为listview没有SelectedIndex属性。然后我在视图中实现一些逻辑(基本上使它变得不那么愚蠢),例如:

public int SelectedIndex
{
    get
    {
        if (myListView.SelectedIndices.Count > 0)
        {
            return myListView.SelectedIndices[0];
        }
        return -1;
    }
}

或者我在视图和演示者之间放置了某种适配器。什么是最合乎逻辑的方法?

2 个答案:

答案 0 :(得分:1)

是的,你可以这样做。诸如Passive View,MVVM,MVC,MVP之类的UI模式是关于如何将表示与应用程序核心逻辑分离以获得松散的一般指南 (它们不是严格的规则)耦合应用程序,可以维持和扩展,最小化。现在,因为在您的案例中使用listview或listbox特定于演示文稿,您可以在演示文稿中放置逻辑来处理此问题,而不会破坏UI和应用程序核心之间的隔离。

答案 1 :(得分:1)

我认为你需要更加抽象。可以认为所选索引与特定UI控件紧密耦合。正如您正确指出的那样,模式正试图避免,以便可以无缝地交换视图。因此,我建议视图具有表示所选内容的属性,即字符串或更复杂的类,以便特定视图实现可以隐藏从抽象到具体的实际转换。这样,演示者只处理对其有意义的事情,而不是特定UI控件的机制。