ios - 在使用 VIPER 的许多控制器上使用的功能在哪里更好?
问题描述
我在我的 Swift 应用程序中使用 VIPER 模式。我需要一个在很多控制器中执行的函数来打开 cardViewStyle。我不知道在哪里添加这个功能更好......
可以是用例吗?一个交互器?,常见的......我无法想象 VIPER 和干净的架构将如何处理这样的功能。
目前该函数在视图控制器、演示器和线框中,因为只调用一次。
该功能将类似于:
//Presenter
func showLikeCard(controller: UIViewController){
wireframe.showLikeCard(controller: controller)
}
//Wireframe
func showLikeCard(controller: UIViewController){
controller.present()
}
谢谢!
解决方案
如https://theswiftdev.com/the-ultimate-viper-architecture-tutorial中所述,
- 视图区域适用于所有 UI。因为从多个 UIViewController 视图控制器中提取的共性与 UI 相关,所以应该将其隔离在视图区域中。尽管有您的//Presenter 评论,但这似乎与在 VIPER 的演示者区域中执行业务规则无关。(如果是这样,那么应该重新设计区域间接口,以便它引用纯粹的应用程序域实体,而不引用像 UIViewController 这样的以 UI 为中心的构造,因为 UIViewController 本身与业务规则执行无关。)关注点是 VIPER 如何解决整个 Massive View Controller 架构由于隔离不足和关注点之间的不充分划分而导致的过度混合问题。
- 除非它从数据库、网络或传感器获取数据,否则它不会在交互区域内。
推荐阅读
- deployment - WFLYCTL0184:新的缺少/不满足的依赖项:(缺少)依赖项:[服务 jboss.deployment.unit。”
我在其中配置了 Jenkins master(server1) 和 agent(server2) 用于构建分发。我为 JAVA springboot 应用程序构建和部署创建了一个管道,而在 server1 中创建的战争能够在 JBOSS EAP 7.0 中部署,但
- c - 为泛型代码提供的复制函数返回的类型可以是我们想要的任何类型吗?
- node.js - 使用 NodeJS 和 Express 进行 MongoDB GridFS 内容搜索
- javascript - 通过滚动正文隐藏 ios Safari 导航栏是唯一的方法吗?
- laravel - 如何在控制器返回时触发通知?
- c++ - 在套接字中,为什么我必须在 connect() 中使用 sizeof(addr) 而不是在 accept() 中使用 (socklen_t)&addr?
- mysql - 如何使用 MySQL 为每个客户输出 3 个最高销售额?
- linux - 在 LINUX TERMINAL 中创建标题从“1.0”到“99.0”的文件,并删除数字总和为 15 的文件
- python - 如何编写一个程序,不断从用户那里获取输入,直到所有输入的总和达到 200
- r - 如何为 igraph R 中的有向图计算局部传递性和 Barrat 传递性