首先,我对MVC了如指掌,并且已经在项目中使用它,但是当涉及组织类和角色时,我有点不确定是否有正确的实现。让我们来看一个场景:
将显示所有员工和部门的示例。数据将从Web Services(Json)获取,并将作为脱机存储(Core Data)。
所以MVC模式将是:
模型将是Employee.swift和Department.swift
app-vue
ServiceManager,它将调用Web服务。
ParseData将解析Web服务响应并将其转换为Employee和Department对象
CoreDataManager是用于管理脱机数据库上的CRUD操作的单例类。
以下是关于上述情况的一系列问题:
答案 0 :(得分:4)
我的理解是否正确?是我想要的结构 建立遵循适当的MVC?
首先我会说“适当的”MVC取决于你问的是谁。它的起源通常归因于Trygve Reenskaug,当他在70年代将其引入Smalltalk时。然而,他的MVC类型与今天最常用的臃肿版本有很大不同。关于MVC的现代思考方式是
幸运的是,有。
Uncle Bob正在讲道Clean Architecture。有几个这样的实现,各种各样的人已经为iOS制作了自己的实现,如VIPER和Clean Swift。
控制器如何与这些组件交互(服务 经理,ParseData,CoreDataManager)。应该有另一个班级 这将促进控制器和数据之间的通信 管理(如果控制器执行此操作,那么它将紧密耦合 结构和大规模)。
遵循Clean Architecture的原则,您应该将这些功能封装到层中,这样您不仅可以将代码拆分为多个组件,还可以在需要时将其替换为其他组件。 (但是,是的,至少要避免将所有这些都放在你的控制器中!)
Model应该具有除属性和初始化之外的任何代码 方法,因为我见过的大多数模型只有属性 声明?
同样,这里没有一个答案。 “真正的”OOP的一些支持者会说每个对象应该是自助服务的(即模型对象应该知道如何自我保持),而其他人则将这些操作的知识提取到“管理者”中。将代码保存到对象中的代码可能意味着将持久性功能乱丢到许多对象中,或者需要依赖子类或其他解决方案来避免这种耦合。
是否应该有单独的UIView类而不是故事板 创建一个合适的MVC结构?
故事板与否无法确定您是否正在使用“正确”的MVC。此外,您选择的类( kind )(UIView或UIViewController)来表示View也不重要。你的ViewController可以被愚蠢到它不包含逻辑的程度(将它所拥有的逻辑转发给另一个类,即VIPER中的Presenter)。
我建议您阅读有关Clean Architecture的信息,也可以观看video of Uncle Bob explaining it,阅读其他人的reports on implementing it,然后考虑MVC是否适合您的iOS项目。