我最近开始使用 MVVM 模式。我开始看到我的视图模型可能很快变得非常大且难以管理。有什么办法可以解决这个问题吗?
2 回答
有几种方法可以解决这个问题。我还没有找到一个通用的“修复”,但我会分享一些我在此过程中学到的东西。您已将此标记为c#,但未指定您使用的平台(这是桌面应用程序、ASP.NET 网站还是什么?)所以我会尽量保持通用。不过,我对 MVVM 的大部分经验都是在 Web 开发中,所以其中的一部分可能会慢慢渗透。
首先,认识到大量视图模型可能是需要重新思考的设计的征兆。可能是一页试图做太多事情。将这个页面分成几个页面不仅可以减小视图模型的大小,还可以让你将逻辑转移到其他方法中,并使你的后端或服务器端代码更易于导航,并且可能会使页面不那么混乱和更容易供最终用户实际使用。
其次,仔细观察你的视图模型是否有点超出了他们的界限。他们可能正在做应该在其他地方处理的逻辑。例如,如果您使用存储库(或类似的东西)来访问数据源,让这些类处理与构造查询或准备保存数据相关的逻辑,而不是让您的视图模型来做。如果您不使用存储库,请考虑添加一些并将您的数据源访问代码转移到它们。
同样,查看您的视图模型是否共享逻辑。如果是这样,请将其转移到一个基类,并在您需要该共享逻辑时从该基类继承。您可以从多个基本视图模型继承以组合功能并减少代码重复。
最后一点是针对 web 的,但是:利用局部视图。如果您的页面的视图模型变得很大,因为该页面上有很多东西,请考虑将页面拆分为区域或窗格(至少在概念上,如果不是视觉上)并使每个区域成为局部视图。这意味着您的视图代码更易于阅读,因为曾经的巨大页面现在或多或少只是带有部分视图调用的模板。它使您的服务器端代码更易于阅读,因为构建和填充这个巨大页面的一种重要方法现在变成了几个较小的方法。最重要的是,它甚至可以让您使用这些窗格做一些聪明的事情,例如使用 AJAX 重新加载它们(定期或基于交互或事件),而无需重新加载整个页面。
部分类、ViewModels 继承(即包含不应复制的公共逻辑的基本 ViewModel)、关注点分离(即使用服务层并且不从 ViewModels 调用 DB 请求)...等。
这取决于您的实际代码以及“非常大”的含义。你的问题实际上很模糊。