有人在answer to a stackoverflow question告诉我,MVVM模式的“两大枪”是1)附加行为和2)服务。我认为他的意思是“ WPF服务”这个短语,我发现它在以下方面使用:
PresentationFoundation.dll定义了WPF控件的类型,动画和 多媒体支持,数据绑定 支持和其他 WPF服务。
其中许多 WPF服务(去耦合事件,丰富的数据绑定, 样式,资源等)是软件 开发最佳实践 汇聚在一个声明性的UI中 叠加。
你会理解WPF背后的动机,学习XAML的语法, 检查核心编程模型,并调查几个 WPF服务。
我甚至没有提到“WPF服务”这样的WPF书籍,所以这只是一个词,意思是“ WPF功能”,例如分离事件,丰富的数据绑定,样式等。或者“WPF服务”一词背后还有其他什么东西?
答案 0 :(得分:14)
Martin Fowler在他的Dependency Injection文章中描述了一项服务。简而言之,服务是一个提供其他对象使用的功能的对象。在讨论模式Inversion of Control和Service Locator时,您会发现这个术语用得很多。
为了使这个主题具体化,让我们考虑一下我们如何在MVVM模式中显示消息框。调用MessageBox.Show()会很糟糕,Ray。这将ViewModel与UI架构紧密联系在一起,使ViewModel难以测试。相反,一种解决方案是使用服务,我们称之为IDisplayMessage。此服务以某种方式(通过上述两种模式之一)提供给ViewModel,此服务用于“显示”消息。在正常操作期间,此服务的具体版本将调用MessageBox.Show(),但在测试期间,我们可以提供不同的具体版本(测试双精度版)(通常是noop,或者如果我们确保ViewModel显示)消息,一个记录调用的版本,因此我们可以声明它已经发生了)。 Onyx(免责声明:我是作者)提供了这样的服务,以及向ViewModel提供此服务(和其他服务)所需的基础设施。
更新:自从做出此回复后,我撰写了一篇博客文章Services: Your ViewModel Deathstar,该文章很好地介绍了该主题。这是一系列帖子的一部分,读者也可能对第一篇文章Behavior - Your Trusty ViewModel Bazooka感兴趣。
答案 1 :(得分:3)
他不是在谈论WPF服务,而是在谈论应用服务。也就是说,将一部分功能抽象为多个虚拟机可以使用的独立服务。