【问题标题】:Is my MVC and MVVM software design pattern knowledge correct?我的 MVC 和 MVVM 软件设计模式知识是否正确?
【发布时间】:2016-11-10 19:21:24
【问题描述】:

我想检查我的知识,因为我以不同的方式看到了我公司的一个项目。

我所知道的是,如果我们想在我们的项目中使用 MVC 软件设计模式,我们可以这样分离我们的项目:

View部分是我们的设计UI,在WPF中表示ui.xaml文件,在WinForms中表示ui.designer.cs,在Android中表示ui.xml,在QtQuick中表示ui.qml,在XCode中表示ui.ui。

Controller 部分是连接到具有相似名称的设计器文件的最近源文件。 WPF 中的 ui.xaml.cs 文件,WinForms 中的 ui.cs,Android 中的 ui.java,QtQuick 中的 ui.h/ui.cpp 和 XCode 中的 ui.swift。

Model 部分是执行主要操作的任何其他类。我通常给他们加上后缀Manager(或类似的东西)来说明它的职责是什么。

对于 MVVM,我还使用 interface 或 abstract class 来继承其 View Model 部分的 View,并将我以前的 Controller 视为 View 的一部分。

一个项目足以构建整个项目。

但是我公司的一个项目有很多类!名称为 UserControl 的设计人员的单独库文件夹,名称为 View 的另一个单独库的文件夹,以及名称为 的另一组库>ViewModel,Controller 和 Model 也是如此。他们说它是 MVC 和 MVVM 的混合体。最令人惊讶的一点是,整个软件有38个独立的项目,由一个程序员编写,团队很小。

请告诉我我的知识是否正确?请告诉我我公司的项目是否朝着正确的方向发展?

【问题讨论】:

  • 为什么要投反对票?请让我知道以提出更好的问题。
  • 我只是在徘徊,你打算如何确定正确答案?
  • @Tengiz 我将根据我分享自己知识的风格确定正确答案。
  • 模型不应该管理任何东西,它应该代表一个业务实体。 SomethingManager 是一个非常糟糕的名字,特别是对于一个模型,但即使是一般来说也是如此。见Coding Horror 和an old question on SO。

标签: android wpf winforms model-view-controller mvvm


【解决方案1】:

您对 MVC 和 MVVM 模式的了解是否正确?您在 Controller(ViewModel) 上犯了一个错误,我认为 Model 也是如此。

您的项目方向正确吗?好像不对。

我们为所有类的视图和视图模型(MVC 中的控制器相同)使用接口,只是为了更好地进行依赖管理。它称为 IoC(控制反转),我们大多数时候使用的技术称为依赖注入,它使用服务定位器或某种服务查找对象使一个类仅依赖于接口(不是具体的 Impl.) .

首先,您可以将 Controller 与 MVVM 混合来处理逻辑代码,并让 ViewModel 处理视图数据模型的绑定和表示,请查看 Code 项目上的这些系列: http://www.codeproject.com/Articles/173618/MVVM-sharp-Episode-1

但我不是 MVCVM 的忠实粉丝,除非你会使用它的所有优点。

Controllers 或 ViewModels 是与 Views 分开的类,我们将逻辑代码放入其中。所以“ui.xaml.cs”不是例如控制器。该文件只是 ui.xaml 类的另一个文件。它们都是同一个类,我们称之为 View。请记住,我们使用表示模式将逻辑代码与 View 的代码隐藏代码分开。

模型是组合在一起的属性对象。我们只是尽量不要将模型类与任何逻辑代码混合。模型可以具有验证函数(例如 .IsNameValid())或其他一些函数来创建对象的另一种表示形式(例如 .ToString()),但不能具有任何逻辑代码(例如 CRUD)。我们不把我们的主要操作放在模型中。主要操作在控制器(视图模型)中,但结果可能是我们绑定到某些视图字段的模型。

我们点击“搜索用户”按钮,SearchUser 命令在 Controller 中运行一个函数,并在结果中将一个 User 模型对象设置为一个名为 FoundUser(在 Controller 中)的属性,并且 View 的 TextBox 显示 FoundUser 的名称。

【讨论】:

    【解决方案2】:

    在每个应用程序中,当涉及到表示层时,您可以使用多种设计模式,MVC、MVP、MVVM 等......但是,在表示层中遵循一种设计模式是最佳实践,因为它是一致的,并且更易于维护。

    另外我认为你对模型和控制器的定义有一些误解,通过解决,你可以更好地理解模式。

    【讨论】:

    • 我的误解是什么?
    • 您对模型和控制器的定义需要修改。我认为您将这些定义与 MVC 或 MVVM 的整个概念混为一谈。
    • 我看过一个大学讲师的教程,讲授基于 MVC 的 iOS 编程。你能自己修改一下吗?
    • 忘记示例,每个平台可能有自己的要求和变化,例如,在 Web 应用程序中,使用服务器端代码,MVC 可能与 Web 客户端中的 MVC 有一些差异。请看martinfowler.com/tags/model-view-controller.html
    • 在您的链接中没有发现与我的知识相比的任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2012-01-30
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多