使用WPF、MVVM和Prism构建应用程序

4

我们团队正在研究在Prism中使用WPF的可能性。

我们的当前解决方案是使用Windows Forms构建的,因此必须考虑和研究很多因素,以便满足此架构迁移的目标。

MVVM模式是与这些因素相关的新功能之一。该模式使用了一种与我们团队目前所知道的完全不同的概念。

我们正在阅读和学习很多相关信息,但仍不能确定它的使用(纯粹地)是否真的能为我们的目的带来实际效益:我们将创建一个将使用CRUD(创建、读取、更新和删除)模型的大量窗口的应用程序。例如:客户注册、产品注册等。

我们认为使用这种模式可能会在模型定义期间增加重复工作量,因为这些模型必须在ViewModels定义期间重新编写。

我想知道是否有人可以分享经验报告或提示,指导我们关于使用这些技术方面的问题。


1
这是一个不适合在StackOverflow上提问的问题,因为它是一个非常广泛的问题,答案会有一定的主观性。MVVM几乎是WPF开发中必须使用的,而Prism是一个很好的DI库,一旦熟悉了WPF和XAML,你的生产力应该会非常高。如果你正在寻找决策的保证和验证,那么你不应该问这样的问题,而是要进行试验并自行评估结果。 - slugster
对不起,我正在学习StackOverflow的规则。您可以通过查看我的声望来了解它。 - Diego Stiehl
1
没问题,你只需要将大问题分解成更小、更简洁的问题,最好是那些有明确答案并且不使用诸如“最好的xyz是什么”或“你能告诉我关于xyz的什么信息”的短语,因为它们往往引起的是观点而不是事实。当你遇到具体问题时,你需要尝试使用WPF/MVVM/Prism,并在这里提出问题。 - slugster
好的。谢谢。我觉得我的问题非常泛泛而谈。我真的希望听到一些关于技术方面的意见。 - Diego Stiehl
1个回答

13
如果你正在使用WPF,绝对要使用MVVM设计模式。它能让你的生活变得更简单,未来的维护也更容易。
关于你的评论:
我们认为使用这种模式可能会导致在定义Models时需要进行重新编写,在定义ViewModels时也需要进行重新编写。
在MVVM中处理Models/ViewModels有两种方式。"MVVM纯粹主义"的方法是从ViewModel公开Model的属性,这种情况下确实需要重复一些代码。更实际的方法是从ViewModel公开整个Model。两种方法都是可行的,尽管我建议除非你有一个有分离人员/团队在Model和ViewModel层上工作的大型项目,否则使用第二种方法。
MVVM纯粹主义:
public class CustomerViewModel
{
    private Customer _customer;

    public string Name 
    {
        get
        {
            return _customer.Name;
        }
        set
        {
            if (value != _customer.Name)
            {
                _customer.Name = value;
                RaisePropertyChanged("Name");
            }
        }
    }
}

<TextBlock Text="{Binding Name}" />

更实用的方法:

public class CustomerViewModel
{
    private Customer _customer;

    public Customer Customer
    {
        get
        {
            return _customer;
        }
        set
        {
            if (value != _customer)
            {
                _customer= value;
                RaisePropertyChanged("Customer");
            }
        }
    }
}

<TextBlock Text="{Binding Customer.Name}" />
关于Prism,我认为它是一个很棒的库。我更喜欢他们的NotificationObjectEventAggregator而不是我的,并且一旦我习惯了DelegateCommand不会自动提高其CanExecuteChanged参数时的变化,我就喜欢上了它。
唯一让我不太喜欢的是Prism的RegionManager。我觉得这让视图控制应用程序流程太多,而不是ViewModels。我也经常看到它被误用于导航,并且经常变成一团糟。我仍然使用它来定义我的应用程序布局(例如MenuRegionNavigationRegionContentRegion),但除此之外,我使用我的ViewModel来满足所有导航需求。
所以最终,我会说去试试吧!我喜欢使用WPF,并且我认为你不应该在没有MVVM设计模式的情况下使用WPF。Prism也是一个很棒的库,可以为每个MVVM应用程序提供一些缺失的功能。

3
完美的回答。这确实是我想要有人告诉我的内容。你给了我一个明确使用MVVM和Prism的理由。我无法投票支持你,因为我的声望值只有1。嘿嘿。 - Diego Stiehl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接