代码之家  ›  专栏  ›  技术社区  ›  NT_

WPF C MVC/MVP模式和背后的用户控制代码

  •  4
  • NT_  · 技术社区  · 16 年前

    我在wpf/wcf/nhibernate/etc中开发了一个大型的ISH应用程序,并将MVP模式(尽管这个问题仍然与MVC相关)作为核心架构来实现。

    就核心架构(控制器、视图等)而言,扩展和添加功能以及在某些位和块上进行返回和更改是很自然的。

    但有时,我创建的自定义用户控件背后的代码感觉就像它“破坏”了所实现的MVC/MVP范式,因为代码关注设计中的泄漏,而设计关注代码中的泄漏。让我再次澄清一下,这只适用于用户控件。我个人认为这个代码隐藏模型(对于ASP.NET和WPF)是一个“坏东西”,但无论我怎么看,我都坚持使用它。

    在这种情况下,您对最佳实践的建议是什么?你如何处理这些问题?例如,您是否处理自定义控件背后的代码,如果是,如何处理??

    3 回复  |  直到 16 年前
        1
  •  1
  •   jrista    16 年前

    既然您使用的是WPF,那么您应该真正了解 MVVM (Model-View-ViewModel) 模式。它是一种 Presentation Model (PM)讨论的模式 Martin Fowler . WPF非常面向绑定,并且为XAML提供了一个非常强大和丰富的数据绑定框架。使用MVVM,您可以完全地将您的视图模型与视图分离开来,从而允许真正的POCO UI开发,从而实现关注点和单元可测试性的最终分离。

    使用MVVM,您将能够将所有视图(包括Windows、用户控件等)模块化并从驱动它们的代码中分离出来。除了为您自动生成的代码之外,您不应该在代码后面有任何逻辑。开始有些事情有点棘手,但是下面的链接应该可以让你开始。要了解的关键是MVVM模式本身、数据绑定、路由事件和命令以及附加的行为:

    wpf+mvvm在前面有一点学习曲线,但是一旦你克服了最初的障碍,你将永远不会,永远不会想回头看。WPF和MVVM的可组合性、丢失耦合、数据绑定和原始能力令人吃惊。您在UI上的自由度将比以前任何时候都要大,而且您很少(如果有的话)真的需要考虑代码隐藏。

        2
  •  1
  •   Cylon Cat    16 年前

    我碰巧喜欢代码落后(还有另一种个人观点),但它们只在它们除了促进控制事件和应用程序其余部分之间的交互之外什么都不做的情况下工作。不过,我承认,我见过很多反例。我甚至写了一些……

    实际上,后面的代码应该做的就是“哦,有人点击了这个按钮;可能有一些事情想知道。”Prism(来自MS模式和实践)为WPF和Silverlight提供了许多体系结构基础设施;它包括一个发布/订阅接口,允许控件和代码在后面简单地发布即使不知道可能的订户,也不知道订户可能会对事件做什么。Prism还为Silverlight添加了命令。

    用于WPF和Silverlight的MVC的常见变体是MVVM(模型、视图、视图模型)。ViewModel使数据以某种最有用的形式(如ObservableCollections,以便于双向绑定)提供给用户控件。

        3
  •  0
  •   RS Conley    16 年前

    自定义控件用于显示内容。在这方面,它们与按钮或下拉组合框没有区别。诀窍是不要让他们直接处理事情。他们需要通过视图界面发送内容,演示者也需要通过视图界面与他们进行交互。

    这样想。如果忽略MVP,自定义控件将以特定的方式与模型交互。您对MVP所做的就是采用这种方式,并使用视图界面定义它们。是的,您正在添加一个额外的调用层,但其优点是您可以完整地记录它如何与系统的其余部分交互。另外,你还可以把它撕下来换成完全不同的东西。因为所有需要做的新事情都是实现视图接口的一部分。

    如果你有一个具体的例子,我可以更好地说明。