MVC设计模式 - 设计模型

问题描述:

我一直在使用mvc设计模式来开发iOS,而且我想知道我是否正确地做了这件事。我已经阅读了很多有关MVC的内容,并且在我的概念中,所有将显示或将改变视图特征的信息都将存储在模型中(因为它是我的vc的“知识”)。所以,按照我设计MVC的方式,我通常为用户交互的每个视图创建一个mvc,并且我拥有模型对象来管理整个应用程序中的所有'共享'信息,并且还有一个单独持续某些数据的'UserSession'类。例如:MVC设计模式 - 设计模型

在我的HomeViewController中,根据我的对象的状态我有不同的子视图,所以在这个MVC(home)中我有一个'演示者'作为控制我的homeSubview类型及其数据的模型。当我需要从另一个模型对象(如用户,或任何对象)中检索信息时,我的“演示者模型”是谁做的(在这种情况下),而在项目中的另一个mvc中也是如此。我的方法是这样的:

控制器[问]模型(即与其他型号,如果需要的沟通),它[“回应”来]然后Controller [更新]查看

所以,这对我来说很好,但我倒像我没有正确使用mvc模式。有人可以提出意见吗?

提前:对不起英文。我欣赏任何建议/帮助,谢谢!

虽然听起来更像是一个MVVM(C)模式,而不是MVC,但我没有看到你所建议的内容有什么问题。

因此iOS中,我们几乎*使用视图控制器,所以我们需要额外的(C)在这里,但主要有:

  • M(模型),这应该代表你的数据模型。 class Model { var firstName: String var lastName: String .... }
  • V(视图),这应该处理演示文稿,绘图到屏幕上,并显示数据 class View: UIView { let fullNameLabel = UILabel() }
  • VM(视图模型),这就是你适应模型中的数据,以适应你的观点需要。这很好,因为如果您有多个视图显示来自同一模型类的数据,则只需添加一个新的视图模型,以调整其所需的数据,而不是使用大量帮助方法混淆模型 class ViewModel { let model: Model func fullName() -> String { return "(model.firstName) (model.lastName)" } }

而且很明显,我们也有出控制器,编排了整个事情:)

这种感觉对我来说,这更是你在做什么,你的presenter是视图模型。

这有助于封装不属于您的视图或模型的功能。全名在技术上不是数据模型的一部分,也不适用于渲染/演示,所以我们将它移到适配器/演示者/视图模型(无论你想调用它)。

也许这对你有一些帮助?随意包含任何其他信息的代码示例,如果你想再有任何反馈/有任何问题

+0

再次谢谢你!其实我越来越喜欢Viper的设计。我以后只见到毒蛇.. https://www.objc.io/issues/13-architecture/viper/ 但我是钢铁企图保持mvc .. – Gehlen