【问题标题】:which one is good practice in MVVM pattern in wpf?wpf中MVVM模式中哪一个是好的做法?
【发布时间】:2014-07-17 04:02:24
【问题描述】:

我想使用 MVVM 模式开发我的 wpf 项目。我应该创建新文件夹来分隔模型、视图、视图模型还是为每个文件夹创建新项目?哪一个是好的做法?我下载了示例项目,有些项目有单独的文件夹,有些项目有单独的项目。我推荐了this link。 但这并不清楚我的怀疑。我在问为模型、视图和视图模型创建 新项目 是好习惯还是创建新文件夹

【问题讨论】:

    标签: c# wpf mvvm


    【解决方案1】:

    这实际上取决于您的用例。您是否有这样的场景,您的视图、视图模型和模型可能会在其他项目中单独重用?我的意思是,例如,您是否有在其他项目中仅使用您的模型的场景。如果是,那么创建单独的项目以便它们可以被重用是有意义的。但是,如果不是这种情况,最好将它们全部放在一个项目中。

    【讨论】:

      【解决方案2】:

      文件夹仅用于创建结构和便于识别。 View 和 ViewModel 的文件夹真的没有必要。

      【讨论】:

        【解决方案3】:

        我通常会为视图、ViewModel 等创建文件夹。然后我会给视图和 viewModels 类赋予描述性的名称。如果您有多个页面,我建议您使用子文件夹。一切都在一个项目中。但这是我的偏好。

        例如:

        查看>销售> WelcometoSalesPageView.xaml

        ViewModel>Sales> WelcometoSalesPageViewModel.vb

        【讨论】:

          【解决方案4】:

          这是一个重复的问题,因为您可以找到 Sheridan 的答案 here 最有帮助。

          基本上,您需要确定项目的总体规模。如果您计划重用片段,您可能想要多个项目和不同级别的文件夹。如果您计划将应用程序的一部分作为 API 提供,这也适用,那么您可能需要使用多个项目。

          对于初学者,我建议您从小处着手,将所有内容放在一个项目中。要学习 MVVM,不要关注项目结构,而是 WPF 和 MVVM 是如何工作的。在您了解 MVVM 的工作原理后,总是可以重新审视解决方案结构。

          编辑

          答案是否定的,您永远不需要为您的项目创建文件夹或单独的项目。只要意识到在不同的文件夹下创建新的classes 也会使用该路径作为命名空间。因此,如果您创建一个ViewModels 文件夹并将class 添加到该文件夹​​,您将在顶部看到namespace WpfApplication1.ViewModels。这也意味着您必须注意 XAML 文件中命名空间的位置。如果要在 XAML 文件中引用 ViewModels 文件夹中的类型,则需要执行类似 <xmlns:vm="clr-namespace:WpfApplication1.ViewModels"> 的操作。缺点是如果您在 ViewModels 中有文件夹,您还需要在 XAML 中引用该命名空间。因此,如果存在 ViewModels > Basics,您将需要 XAML 中的两个命名空间,因为您无法在一个 xmlns 声明中引用所有子目录。

          <xmlns:vm="clr-namespace:WpfApplication1.ViewModels">
          <xmlns:vmBasics="clr-namespace:WpfApplication1.ViewModels.Basics">
          

          另一种方法是使用文件夹并将类命名空间重命名为简单的旧 namespace WpfApplication1,然后您只需要一个 xmlns 声明即可访问应用程序中的所有类型。

          &lt;xmlns:app="clr-namespace:WpfApplication1"&gt;

          所以,如果不需要,不要把事情复杂化;通常在学习阶段没有什么会如此复杂以至于需要多个项目。文件夹是可选的,但如果您使用它们,请了解其副作用/解决方法。

          【讨论】:

          • 是的,该链接很有帮助,但我的问题有点不同。我在问我是否需要为模型、视图和视图模型创建不同的项目,或者为每个创建新文件夹。
          • 子文件夹不一定需要更改命名空间。您始终可以禁止这种约定,并仅将文件夹用于组织目的,并且您的类仍然在一个命名空间下编译。是的,这是更多的工作。
          • 是的,但是你如何抑制这个约定?您的意思是在根文件夹中添加一个新类并将其拖到子目录中吗?那就是改变命名空间。我不确定还有其他方法可以做到这一点。
          • 你可以专门设置每个类的命名空间,所以当你创建它时,只要给它你想要的任何命名空间。
          • 这就是我在回答中提到的。 renaming the class namespaces
          猜你喜欢
          • 2011-04-17
          • 1970-01-01
          • 2011-05-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-12
          • 2012-08-24
          • 2015-01-22
          相关资源
          最近更新 更多