Tag: 建筑设计

MVC分解原理

iOS社区一直在寻找一种统一的架构来统治一切。 不幸的是没有。 为什么我要写这个。 我在专业项目上使用了MVC , MVVM , MVP , VIPER等各种架构。 然后,我在寻找再次创建健壮的应用程序的正确方法。 有一天,我看到了由Guilherme Rambo创建的这个很酷的网站。 然后我开始思考,也许问题不在于架构。 也许我们的观点是问题所在。 因此,对于下一个项目,我决定选择MVC 。 在这篇文章中,您将了解这种方法。 问题 有关WMVC(错误的MVC)的主要问题是职责分配不平衡。 控制器几乎可以执行所有操作。 联网 资料解析 商业逻辑 动画制作 布置视图 用数据更新视图 响应用户输入 导航 因此,它很难测试,难以维护,难以修复。 UIViewController不是屏幕。 这是一个组成部分。 解 您可以在一个屏幕中使用许多视图控制器。 每个视图控制器都应承担自己的责任。 假设您从服务器加载数据并在屏幕上显示加载状态,然后响应出现,如果您的网络请求失败(总是失败),则在屏幕上显示数据状态或错误状态。 所有这些过程可能由一个视图控制器负责。 我们可以称之为StateViewController。 该视图控制器仅代表三种可能的状态。 您可以阅读John Sundell的这篇文章,以了解如何实现状态视图控制器。 当您需要针对不同屏幕的某些功能时,它非常简单,可以节省大量时间。 例 让我们来看一个例子。 我想创建一个Netflix细节场景。 我将场景分为如下所示的较小部分。 当然这是一个演示,我只想展示如何在屏幕上分解为较小的组件。 DetailViewController应该能够由其他视图控制器组成。 像HeaderViewController , DescriptionViewController , ActionsViewController等一样。这将提供容易的错误修复, 毫不费力地添加新功能,并且为大型控制器编写单元测试比大型视图控制器容易得多。 DismissViewController的责任是显示关闭按钮和火灾关闭事件。 […]

iOS应用的轻量级模块化

您编写一个应用程序。 首先,它只是一个简单的应用程序。 随着时间的流逝,您会发现许多有用的功能,这些功能将吸引更多的用户并很好地为当前用户服务。 您会找到一个很好的模式来模块化您的应用程序,只需在您的可执行目标模块中放置一个类即可。 设计良好,但不能防错。 幸运的是,错误随着编译时间的增加而上升。 坏消息是,您编写了受错误影响的一千行代码。 那是另一个故事。 这是我构建名为穆斯林应用程序的应用程序时的一些注意事项。 这是一个应用程序,您可能会发现“很多”子应用程序。 就像Google带有其子应用程序(Gmail,文档等)一样。 我将回教应用程序构建为其子应用程序的启动器,其中一些子项是回教笔记(muNote),回教工作(muJob)和回教议程(muAgenda)。 从开发人员角度来看,该应用程序的目标非常简单,您构建的应用程序可以轻松组成更大的应用程序,也可以作为单个应用程序轻松发布。 让我们将这些要求放到一个虚构的讲故事设计中。 首先,您需要概括这些子应用程序中的通用组件,以使其可以组合成一个应用程序。 您声明将由这些子应用程序实现的协议。 您声明的协议将为“ SubApplication”。 您实现了一个设计,穆斯林应用程序(将被称为“容器”)将依赖于此协议来启动其子应用程序。 最后,将这些分散的应用程序连接起来,发现您的设计至少是干净的,可组合的。 一旦需要添加更多子应用程序,就可以实现协议并将其注册到Container。 而且,您仍然可以将单个应用程序作为单个应用程序启动。 如果您与团队一起工作,您会发现开发变得更容易,因为您不需要依靠其他人来测试您自己的工作。 那么,告诉我您的实施情况,男孩! 啊,好吧! Xcodeworkspace是将另一个文档分组的文档,因此您可以一起处理它们。 这是您可能想知道的第一件事。 因为我正在使用这种工作空间方法,所以我假设您知道这一点。 还有其他方法,但是我现在将继续使用xcodeworkspace。 文档是您最好的朋友! 在继续之前,最好记住本文中使用的术语可能与您先前的理解相抵触。 如果这些冲突使您感到困惑,请记住,本文中的术语受其上下文约束,这意味着当前的目的是模块化。 回想一下我们的要求,它需要一个协议,该协议可以作为Container启动其子应用程序的网关。 您将创建一个有两个主要目标的项目,一个可执行的iOS Single View Application和一个CocoaTouch框架。 您的项目将命名为MuslimApp(容器)。 您可能希望在项目创建时选择“单一视图应用程序”,因为该名称也将是您的xcodeproject文档的名称。 要创建一个新目标,请选择“文件”>“新建”>“目标…”,然后选择一个CocoaTouch框架。 将您的新目标命名为“ SubApplication”,如下所示。 您将在此目标(模块)中声明网关协议。 是的,您已经完成了将Container及其子应用程序网关模块化的第一步。 您可能会好奇,将网关协议放在单独的目标(模块)中可以帮助您为项目定义清晰的结构。 而且,由于SubApplication模块(将称为Gateway)是轻量级的,因此毫无疑问,您可以将其导入到子应用程序中。 Swift采用了面向协议的编程范例,您会想知道它有多么强大。 因此,让我们先声明您的网关协议! 公共协议SubApplication {} 由于Swift访问修饰符基于模块作用域起作用,因此在这里使用public。 Public修饰符使您的类型在另一个模块中可见。 下表列出了子应用程序的一般要求: 1.姓名 2.缩略图 […]

Belajar iOS体系结构设计:VIP — Clean Swift

Dan Hari ini saya belajar建筑设计iOS应用程序。 Desain Asitektur yang biasa digunakan oleh pengembang pemula dalam pengembangan aplikasi iOS adalah MVC(模型-视图-控制器)。 MVC memang bagus dan mudah diterapkan secara cepat namun bukan yang terbaik untuk desain arsitektur pengembangan aplikasi。 Salah satu alasannya adalah MVC tidak menyediakan ketahanan yang saat terjadi bug。 Pengembang bisa saja terus menerus berputar di […]