我最近开始使用MVVM模式。我开始发现我的View-Model可能会很快变得非常大而且难以管理。有什么方法可以解决这个问题吗?如何让我的视图模型变得单一/非常大?
回答
有几种方法可以解决这个问题。我还没有找到一个单一的通用“修复”,但我会分享一些我一路上选择的东西。你已经标记为c#,但没有指定你使用的是什么平台(这是一个桌面应用程序,ASP.NET网站,或什么?),所以我会尽量保持它的通用性。我的大部分MVVM经验都是在网页开发中,但其中的一部分可能会蔓延。
首先,认识到大量视图模型可能是需要重新思考的设计的症状。这可能是因为一个页面试图做太多。将这个页面分成几个页面不仅会减少视图模型的大小,还会让您将逻辑转移到其他方法中,并使您的后端或服务器端代码更易于导航,并且可能会使页面变得更加简单和简单供最终用户实际使用。
其次,仔细观察一下,看看你的视角模型是否超出了他们的范围。他们可能正在做逻辑,应该在其他地方处理。例如,如果您使用存储库(或类似的东西)访问数据源,请让这些类处理与构建查询或准备保存数据有关的逻辑,而不是让视图模型执行此操作。如果您不使用存储库,请考虑添加一些内容并将数据源访问代码移入其中。
同样,看看你的viewmodels是否共享逻辑。如果是这样,请将其转换为基类,并在需要该共享逻辑时从该基类继承。您可以从多个基本视图模型继承来组合功能并减少代码重复。
最后一点是更具体的网络,但:使用部分视图。如果页面的视图模型变大,因为该页面上有很多东西,可以考虑将页面分割成区域或窗格(至少在概念上,如果不是可视的)并且使每个区域成为局部视图。这意味着您的视图代码更易于阅读,因为这是一个巨大的页面,现在或多或少只是一个具有部分视图调用的模板。它使您的服务器端代码更易于阅读,因为构建和填充这个巨大页面的一个重要方法是现在几个较小的方法。最重要的是,它甚至可以让你用这些窗格做些聪明的事情,比如使用AJAX重新加载它们(定期或基于交互或事件),而无需重新加载整个页面。
部分类,ViewModels继承(即包含您不应该复制的公共逻辑的基本ViewModel),关注点分离(即使用服务层并且不要从ViewModel调用DB请求)等等。
这取决于你的实际代码,以及你的意思是“非常大”。你的问题实际上是模糊的。
- 1. 我的分割视图控制器让窗口变得非常薄
- 2. Ember.js嵌套视图变得非常慢
- 3. 图像变得非常轻
- 4. 如何让视频在看过一次后变得模糊?
- 5. 在Java中创建大型csv文件变得非常慢
- 6. Symfony:多个模型的单一视图
- 7. asp.net复杂的模型单一视图
- 8. 得到从视图模型
- 9. 如何解析非常大的图像?
- 10. 单视图模型(iOS)的多视图
- 11. 如何在Cocoa中实现非常大的滚动视图
- 12. 运行yum的更新使得一个非常大的图像
- 13. 我如何使用Qt模型 - 视图
- 14. 我怎样才能让我的视图模型
- 15. 如何让我的AMP变得多余?
- 16. 如何让我的TableView选择打开我的模态视图?
- 17. Android Tabs显得非常大
- 18. 让一个非devise_invitable模型邀请一个devise_invitable模型
- 19. 如何从视图模型得到一个创建视图使用对象
- 20. 单一模型 - 多个过滤视图
- 21. 在Java中创建一个非常非常大的地图
- 22. 绘制一个非常大的位图
- 23. MVC3 .NET多模型或单一的视图模型
- 24. 如何从视图视图模型
- 25. 如何使用视图模型为我的所有视图编写一行?
- 26. 如何删除非托管视图模型引用的Django模型
- 27. 嵌套的对象模型,视图中的循环和错误的输入使视图循环变得异常
- 28. 我如何让JModelica变得安静?
- 29. Aptana 3对于多个(大型)项目变得非常缓慢,我该如何提高性能?
- 30. MVC - 另一个模型视图中的模型视图
多视图模型...? – 2013-02-13 13:47:52
信息太少。 – Jon 2013-02-13 13:48:21
阅读Robert C. Martin的“Clean Code”(ISBN 0-132-35088-2) – 2013-02-13 13:54:21