gpt4 book ai didi

silverlight - MVVM:命令与事件处理程序

转载 作者:行者123 更新时间:2023-12-04 03:14:25 26 4
gpt4 key购买 nike

我知道这已经被做死了,但大多数答案都是“是的,如果你愿意,你可以使用事件处理程序代替命令”。这仍然不能解决是否需要编写复杂命令而不是仅在代码中连接事件处理程序以调用 View 模型中的可测试方法的问题。

我不喜欢命令,因为它们会生成大量样板代码,并且与普通方法相比没有任何好处,而且其中一些(例如拖放)很难实现。

写作有什么问题:

代码隐藏:

private void Button_Click(object sender, RoutedEventArgs e)
{
viewModel.LoadData();
}

View 模型:

public void LoadData()
{
//....
}

这与任何命令一样可测试(如果不是更多的话)。 IMO,只要 UI 特定的东西没有泄漏到您的业务逻辑中,就真的没有必要在这样的复杂模式上浪费时间。想法?

最佳答案

What's wrong with writing

什么都没有——大部分情况下。

如果您小心地将业务逻辑排除在代码隐藏文件之外,那么使用代码隐藏并没有什么问题。这是直接委托(delegate)给 ViewModel,这是合理的。

话虽如此,就长期可维护性而言,这里有几个潜在的缺点:

  1. 通过这样做,您可以更紧密地将 View 耦合到 ViewModel。虽然这是一个合理的做法(实际上,View 总是知道 ViewModel),但它确实阻止了在某些情况下对 View 组件的潜在重用,因为使用 ICommand 可以让您拥有相同的 View 可与可能不同的 View 模型一起使用。 (不过,这在实践中很少见。)
  2. 这开始了一个滑坡 - 通过将“任何”代码添加到后面的代码中,您打开了另一个开发人员将在其中添加“仅多行”的潜力。久而久之,这可能会导致困惑。
  3. 它将代码添加到另一个必须维护的地方。现在您必须维护 ViewModel .cs 文件、.xaml 文件和代码隐藏文件。
  4. 您正在将此逻辑硬连接到按钮中。如果您决定更改控件、使用手势等,则必须记住重新处理此逻辑。

关于silverlight - MVVM:命令与事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5024120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com