WPF C#中的MVC/MVP模式和用户控件代码后台

4

我正在开发一个较大的WPF/WCF/NHibernate等应用程序,并实现了MVP模式(尽管这个问题仍然与MVC相关)作为核心架构。

就核心架构而言(控制器、视图等),扩展和添加功能以及回来更改某些部分感觉相当自然。

但有时,我创建的自定义用户控件的代码后端性感觉好像“破坏”了实现的MVC/MVP范例,因为代码关注点泄漏到设计中,设计关注点泄漏到代码中。让我再次澄清,这只针对用户控件。我个人认为,这种代码后端模型(适用于ASP.NET和WPF)是一件“坏事”,但无论我的意见如何,我都被困在其中。

在这种情况下,您有什么最佳实践建议?您如何处理此类问题?例如,您是否解决自定义控件的代码后端性问题,如果是,如何解决?

3个回答

1

由于您正在使用WPF,因此您应该真正了解MVVM(Model-View-ViewModel)模式。这是Presentation Model(PM)模式的一种形式,由Martin Fowler讨论。WPF非常绑定导向,并为XAML提供了一个非常强大和丰富的数据绑定框架。使用MVVM,您可以完全将您的ViewModels与Views分离,实现真正的POCO UI开发,提供最佳的关注点分离和单元测试性。

使用MVVM,您将能够将所有视图(包括Windows、UserControls等)模块化和解耦,使其与驱动它们的代码分离。您不应该在Code Behind中有任何逻辑,除了自动生成的内容。一些东西起初可能有点棘手,但以下链接应该可以帮助您入门。需要学习的关键内容包括MVVM模式本身、数据绑定、路由事件和命令以及附加行为:

WPF + MVVM 在一开始有点陡峭的学习曲线,但是一旦你跨过了最初的障碍,你就永远不想回头了。WPF 和 MVVM 的可组合性、松耦合、数据绑定和原始能力令人惊叹。你将拥有比以往更多的 UI 自由度,而且你很少甚至从不需要真正费心去编写代码。


1

我个人喜欢代码后台(又是一个个人观点),但只有在它们仅促进控件事件与应用程序其他部分之间的交互时才有效。虽然我承认我看到了很多反例,甚至写了一些...

实际上,所有代码后台应该做的就是“哦,有人点击了这个按钮;可能有些东西想知道这个。” PRISM(来自MS模式和实践)为WPF和Silverlight提供了许多架构基础设施;其中包括发布/订阅接口,允许控件和代码后台简单地发布事件,而不必意识到可能的订阅者或订阅者可能对事件做什么。PRISM还为Silverlight添加了命令。

WPF和Silverlight的常见变体是MVVM(Model,View,ViewModel)。 ViewModel以最有用的形式(例如ObservableCollections)向用户控件提供数据,以便促进双向绑定。


0

自定义控件用于显示内容。在这方面,它们与按钮或下拉组合框没有什么不同。关键是不要让它们直接处理内容。它们需要通过视图接口发送内容,Presenter也需要通过视图接口与它们进行交互。

可以这样想。如果忽略MVP,自定义控件将以特定方式与模型交互。使用MVP的好处是将这些方式提取出来,并使用视图接口进行定义。是的,你增加了一个额外的调用层,但优点是你可以彻底记录它如何与系统的其余部分交互。此外,你还可以轻松地将其删除并替换为完全不同的东西。因为所有新的东西只需要实现其部分的视图接口即可。

如果您有具体的示例,我可以更好地说明。


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