Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何防止视图模型变得单一/非常大?_C#_Mvvm - Fatal编程技术网

C# 如何防止视图模型变得单一/非常大?

C# 如何防止视图模型变得单一/非常大?,c#,mvvm,C#,Mvvm,我最近开始使用MVVM模式。我开始意识到我的视图模型可能会很快变得非常大且难以管理。有什么方法可以解决这个问题吗?部分类、ViewModels继承(即包含不应重复的公共逻辑的基本ViewModel)、关注点分离(即使用服务层,不从ViewModels调用DB请求)等等 这取决于您的实际代码,以及“非常大”的含义。您的问题实际上很模糊。部分类、ViewModels继承(即包含不应重复的公共逻辑的基本ViewModel)、关注点分离(即使用服务层,不从ViewModels调用DB请求) 这取决于您的

我最近开始使用MVVM模式。我开始意识到我的视图模型可能会很快变得非常大且难以管理。有什么方法可以解决这个问题吗?

部分类、ViewModels继承(即包含不应重复的公共逻辑的基本ViewModel)、关注点分离(即使用服务层,不从ViewModels调用DB请求)等等


这取决于您的实际代码,以及“非常大”的含义。您的问题实际上很模糊。

部分类、ViewModels继承(即包含不应重复的公共逻辑的基本ViewModel)、关注点分离(即使用服务层,不从ViewModels调用DB请求)


这取决于您的实际代码,以及“非常大”的含义。你的问题其实很模糊。

有几种方法可以解决这个问题。我还没有找到一个通用的“修复”,但我将分享一些我在这一过程中学到的东西。您已将其标记为,但未指定您正在使用的平台(这是桌面应用程序、ASP.NET网站还是什么?),因此我将尝试保持其通用性。不过,我在MVVM方面的大部分经验都是在web开发方面,所以其中的一些可能会慢慢出现

首先,认识到大规模视图模型可能是需要重新思考的设计的症状。这可能是一页试图做的太多了。将此页面拆分为多个页面不仅可以减小viewmodel的大小,还可以将逻辑移到其他方法中,并使后端或服务器端代码更易于导航,还可以使页面更整洁,更便于最终用户实际使用

其次,仔细观察您的ViewModel是否超出了它们的界限。他们可能在做应该在别处处理的逻辑。例如,如果您正在使用存储库(或类似的存储库)访问数据源,则让这些类处理与构造查询或准备数据以进行保存相关的逻辑,而不是让您的viewmodels来处理。如果不使用存储库,请考虑添加一些In和将数据源访问代码转换为它们。 类似地,查看viewmodels是否共享逻辑。如果是这样的话,请将其转移到基类,并在需要共享逻辑时从该基类继承。可以从多个基本视图模型继承,以组合功能并减少代码重复


最后一点更具体一些,但是:使用局部视图。如果页面的VIEW模型变得越来越大,因为页面上有很多内容,请考虑将页面分割成区域或窗格(至少在概念上,如果不是视觉上的),并使每个区域成为局部视图。这意味着您的视图代码更容易阅读,因为以前庞大的页面现在或多或少只是一个带有部分视图调用的模板。它使您的服务器端代码更易于阅读,因为构建和填充这个巨大页面的一个大方法现在是几个较小的方法。最重要的是,它甚至可以让你用这些窗格做一些聪明的事情,比如使用AJAX(定期或基于交互或事件)重新加载它们,而不必重新加载整个页面。

有几种方法可以做到这一点。我还没有找到一个通用的“修复”,但我将分享一些我在这一过程中学到的东西。您已将其标记为,但未指定您正在使用的平台(这是桌面应用程序、ASP.NET网站还是什么?),因此我将尝试保持其通用性。不过,我在MVVM方面的大部分经验都是在web开发方面,所以其中的一些可能会慢慢出现

首先,认识到大规模视图模型可能是需要重新思考的设计的症状。这可能是一页试图做的太多了。将此页面拆分为多个页面不仅可以减小viewmodel的大小,还可以将逻辑移到其他方法中,并使后端或服务器端代码更易于导航,还可以使页面更整洁,更便于最终用户实际使用

其次,仔细观察您的ViewModel是否超出了它们的界限。他们可能在做应该在别处处理的逻辑。例如,如果您正在使用存储库(或类似的存储库)访问数据源,则让这些类处理与构造查询或准备数据以进行保存相关的逻辑,而不是让您的viewmodels来处理。如果不使用存储库,请考虑添加一些In和将数据源访问代码转换为它们。 类似地,查看viewmodels是否共享逻辑。如果是这样的话,请将其转移到基类,并在需要共享逻辑时从该基类继承。可以从多个基本视图模型继承,以组合功能并减少代码重复


最后一点更具体一些,但是:使用局部视图。如果页面的VIEW模型变得越来越大,因为页面上有很多内容,请考虑将页面分割成区域或窗格(至少在概念上,如果不是视觉上的),并使每个区域成为局部视图。这意味着您的视图代码更容易阅读,因为以前庞大的页面现在或多或少只是一个带有部分视图调用的模板。它使您的服务器端代码更易于阅读,因为构建和填充这个巨大页面的一个大方法现在是几个较小的方法。最重要的是,它甚至可以让你用这些窗格做一些聪明的事情,比如使用AJAX(定期或基于交互或事件)重新加载它们,而不必重新加载整个页面。

多视图模型?信息太少。请阅读Robert C.Martin的“干净代码”(ISBN 0-132-35088-2)多视图模型?信息太少。请阅读罗伯特·C·马丁的《清洁代码》(ISBN 0-132-35088-2)