问题标签 [viper-architecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
865 浏览

ios - 路由 Viper 架构

如何在 Viper 架构的项目中创建良好的路由?我开始为路由创建文件,但我不明白接下来我必须做什么。

我创建了一个文件线框优先控制器和线框协议:

在文件线框中我添加:

在我创建 RootWireframe 之后

在文件 AppDelegate 我只改变

我必须添加或更改什么才能正常工作?

0 投票
2 回答
255 浏览

ios - 当我们使用 VIPER 架构时如何创建常量?

我正在遵循 VIPER 设计模式在 Swift 中构建应用程序。

VIPER 遵循四个组件:

1) 视图 2) 线框 3) 演示者 4) 交互者

我的常量将出现在哪个组件中以及如何出现?

0 投票
1 回答
549 浏览

ios - 通知观察者在 VIPER 模式中的位置是什么?

我正在将我的项目更改为 VIPER 模式。

我的主要观点有很多观察者。我不知道应该将我的观察者放在 VIPER 的什么位置。

因为我不想让我的观察者出现。以前我有单独的观察者类,当有通知时,我用来更新到主视图。

但在新的 VIPER 中,我不知道哪里是最好的地方。

我应该制作新的 VIPER-N 吗?N 为通知意见。

0 投票
2 回答
935 浏览

ios - 在 iOS 中实现 VIPER 架构

我是第一次按照VIPER实现我的项目,我对它的实现有一些疑问。这是我到目前为止所做的:
1)实现登录页面
步骤
i)用户点击登录按钮(在视图控制器上)。

ii)我有一个请求模型,其中存储“用户名”和“密码”。这是模型的结构:

所以我将这个 Request 对象传递给Interactor。

iii)在Interactor中,我分配了不同的Workers(Worker 类对象方法)来执行不同的任务,例如电子邮件验证、空 textFields 验证等。如果一切正常,worker api 方法会点击登录 API 并将响应通过代表团。

iv) 更新上述结构中的“响应”模型。

v) 现在我在Interactor中获得了响应,我将这个响应传递给Presenter以根据控制器需要向用户显示的内容进行一些操作。

vi) 将数据传递给控制器​​并将其呈现给用户。

问题1:我做的一切是否正确。如果不是,请告诉我正确的方法。如果是,请告诉我是否还有改进的余地。
问题 2:我需要在主页上实现UITableViewUICollectionView,我认为扩展是它们的方法。我也会对主页遵循相同的策略。但是假设,在 'didSelectRowAtIndexPath' 中,我需要显示弹出给用户,我认为ViewController直接向Presenter询问数据会更好。但这是正确的方法吗?如果不是正确的方法是什么?
问题 3:我是否应该从cellForRowAtIndexPath传递数据 :到实际的 cell(MyCell:UITableViewCell) 类方法,然后将值分配给 UIElements?是或否?

0 投票
1 回答
565 浏览

ios - iOS VIPER - 自定义警报(类似于 UIAlertView)应该是不同的模块吗?

我有一个模块,例如模块 A,在完成一些工作并单击 viewControllerA 的按钮后,我应该收到一个自定义“警报”,表明我尝试的请求成功。“警报”应该有一个关闭按钮,让用户关闭视图并返回到 viewControllerA。

所以,我认为有两种可能:

1)只需创建 UIView,其 UILabel 与约束和 UIButton 绑定,并在隐藏包含大多数子视图的当前容器视图时显示它。

2)为调用的结果创建一个模块,并通过线框(路由器)在 viewControllerA 的视图和警报视图之间导航。

所以,这是我的疑问。似乎按照 VIPER 的指导方针,我应该使用 (2) 并创建一个模块,以便导航由线框控制,但警报视图仅由一些标签和一个按钮组成。这里没有要处理的数据。因此,交互器在 ResultModule 中将毫无用处。

然后我应该只显示警报视图alertView.alpha = 1containerView.alpha = 0在单击警报视图上的关闭按钮时将其反转,还是应该全部使用 VIPER,创建一个新模块?

0 投票
3 回答
1116 浏览

ios - 在 Clean Architecture 中使用 NSFetchedResultsController

我一直在寻找答案,但运气不佳。这个问题几乎相同,但答案不是很清楚(至少对我来说!): 它是 VIPER 架构中 NSFetchedResultsController 的位置?

NSFetchedResultsController 似乎对于 iOS 应用程序来说是一种非常有用的方法,但我所看到的所有示例都将其放在 ViewController 层——至少,VC 成为了一个委托。在 Clean Architecture/Viper 中,模型层与视图层非常脱节,我无法弄清楚 NSFRC 是如何在这样的架构中使用的。上述问题的答案暗示交互者应该是一个代表,但这没有意义——托管对象随后将呈现给交互者,而不是 PONSO。也许我还不太了解它,但是(a)它是否在清洁架构中占有一席之地?(b) 如果是,那么是否需要正确的 Swift 实现模式?

0 投票
1 回答
843 浏览

ios - 如何在 UITabBarController 中使用 Viper 架构

我使用 UINavigation 控制器作为根视图控制器来导航我的应用程序。登录/注册后,我的应用程序启动具有静态选项卡(UI-View-Controllers)的 UITab-Bar-Controller,它是在情节提要中创建/链接的。

在这里,我的标签栏(视图控制器)类中的演示者 obj 中的值为零,因为可能是我只在 UINavigationController 中推送 UI-Tab-Bar-Controller 而不是 viewController 以及当我尝试调用演示者时。我也不知道如何在更改选项卡时管理选项卡栏内部类。

0 投票
2 回答
1278 浏览

ios - VIPER中UITableView数据源的ViewModel,swift

我正在为我最近的项目使用 VIPER 架构。但我想知道如何实现 UITableView 数据源。

在 VIPER 中,视图是被动的。他们向 Presenter 发送事件,然后 Presenter 向 View 发送正确的 ViewData(ViewModel)。

所以我在 View 中存储了 tableView 的 ViewModels。(View 不会向 Presenter 询问数据。)

当用户在 tableView 中选择项目时,ViewdidSelectItemAt会向 Presenter 发送带有 indexPath 的事件。然后 Presenter 为事件决定适当的操作,推送 VC 或获取数据。

所以 Presenter 应该知道 ViewData(或 Real Data)。或者 Presenter 将事件传递给 Interactor,因为 Interactor 存储的是 Real Data。

这是我的同步困境。数据分布在 View、Presenter、Interactor。它们可能不同,因为 Real Data 可以在后台异步更改(如聊天应用程序)。因为锁定是完全不合适的,我如何确保 VIPER 架构中多个线程之间的状态数据完整性?

任何帮助将不胜感激。:D

0 投票
1 回答
257 浏览

ios - Swift 3,让领域远离 appdelegate

我正在我的应用程序中使用 VIPER 架构,现在我想使用我的领域数据库。但是,通常我会把它放在 中AppDelegate,如果我想在 中使用它ListInteractor,我需import UIKit要这样做是违反 VIPER 规则的。

我怎样才能很好地解决这个问题?我考虑了以下选项:

  • 创建服务
  • 单例解决方案
  • 但是,仅import RealmSwift在交互器中使用,我将失去简单的迁移功能。

我确实希望能够使迁移以及其他配置尽可能简单。

0 投票
1 回答
611 浏览

ios - 使用 VIPER 的可重用视图/模块

我是 VIPER 的新手,并试图使用它开发一个模块(1 个屏幕)。应用程序的其他模块中使用了确切的屏幕,但具有一些附加功能。只是想知道我可以在其他模块中重用 VIPER 的哪些组件?主持人?路由器?交互者?看法?