问题标签 [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.
ios - 这个 Xcode 项目文件夹层次结构最可能的设计模式是什么?
这是项目文件夹层次结构。我想知道在这种情况下使用什么设计模式。到目前为止,我发现它最有可能是Clean-Swift Architecture (VIP)。
下面是一个示例 Clean-Swift 项目的文件夹层次结构。
swift - 具有通用协议的 VIPER 架构
我有一个关于 VIPER 架构和泛型协议的有趣问题。
看起来 Presenter 和 Interactor 通信很多,(用于获取和接收数据),但 Interactor 的“输出”功能将始终相同
就像是:
如果你有 10 个模块,你将拥有这个函数的 10 倍,而只有 JSONObject 会发生变化......
是否可以使用类似的东西
并在presenter中选择Object的类型?
ios - 如何在 VIPER 结构中使用委托传输数据
我有两页,第一页是loginPage
,另一页是MainViewPage
。
我想将userInfo
(UserName
和Password
)从第一页转移到第二页,我正在使用 VIPER 结构。
我已经userInfo
在第二页得到了,但是当我使用Presenter
函数更新UILabel
时SecondPage
,进度被破坏了,它显示以下错误:
线程 1:致命错误:在展开可选值时意外发现 nil。
这是我的Presenter
:
Presenter
两者中的文本都MainView
具有价值,但是当它调用updateLabel
函数时,进度被破坏了。此存储库中此演示的代码
ios - 如何在一个屏幕上触发网络请求并最终在 VIPER 架构中获得结果?
我需要调用一个“函数”来进行一些网络请求和数据处理,这可能需要一些时间。
因此,几乎在我的应用程序启动后,我就会调用我的函数,以便在用户到达需要的屏幕时准备好响应。
您将在哪里/如何触发网络请求,以及您将如何通知最终的演示者您得到了响应或没有响应?
ios - iOS - 在 VIPER 模式上配置自定义 UITableViewCell
我一直在为我当前的iOS (Swift)项目遵循VIPER设计模式,并且我是在代码上使用设计模式的新手。我无法决定自定义或配置. 我是否更改单元格的->
此委托方法或派生的类实例方法?实际上,这项工作是从模型数据中更改单元格,例如 Label、ImageViewUITableViewCell
ViewController
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
UITableViewCell
IBOutlets
ios - VIPER 模块依赖项
我一直在从事个人项目,以便更好地了解 VIPER 架构。我真的很喜欢我可以保持模块分离的方式,使代码更干净。
当谈到模块依赖时,我仍然有一些疑问:
我有一个模块负责显示基于用户数据的一些统计数据,另一个模块负责显示基于统计数据的一些数据预测。
然后,我的 ProjectionsInteractor 需要从 StatisticsInteractor 获取一些数据,因为我不想重复实现相同的东西两次。
我已经有一个 DataManager 层,基本上是一个 CoreDataManager,但那里没有任何逻辑。它只是被交互者用来检索和操作一些数据,而不知道关于持久性细节的任何事情。
我应该把从多个交互者中提取出来的共性放在哪里?这有什么不同吗:
- 共性是否与交互器的核心{数据存储、网络、传感器}数据采集/存储目的相关
- 共性是否与要对从 {data-store、networking、sensors} 获取的数据执行的业务规则有关?
ios - Viper 架构中的计时器在哪里
假设我们必须每 10 秒更新一次数据。我们应该在哪里创建/存储计时器,它会在 VIPER 架构中的哪里触发相关方法?ViewController 应该这样做并通知演示者吗?或演示者应该持有计时器?
ios - 将视图控制器的代码移动到演示者如何更容易在 VIPER 中进行单元测试?
我在VIPER博客中读到,将视图控制器的代码移动到Presenter
代码中可以很容易地进行单元测试。博客中给出的原因是其中Presenter
没有任何与UIKit相关的代码。
这如何使单元测试更容易。有人可以详细解释一下吗?或者除了避免大规模视图控制器问题之外,还有其他优势吗?
ios - 如何在 VIPER 设计模式中将 ViewController 引用传递给路由器?
PS:
这不是一个自以为是的问题。在 VIPER 中连接各种模块是一个合理的疑问。这是一个理论问题,所以没有附加代码。我只需要知道在这种特定情况下我们如何连接 View-Presenter-Router 而不打破基本规则VIPER
我是第一次尝试使用 VIPER。这是我对VIPER的基本理解。
视图:应该显示 UI 控件并捕获IBActions
并调用其演示者的委托方法来处理事件
Presenter:将处理所有与 UI 相关的数据,并为渲染准备数据并将数据交还给 View。每当需要屏幕转换时,它都会调用其路由器并要求路由器执行转换
PS: Presenter 中不会有任何 UIComponents。所以没有import UIKit
在presenter中声明。
路由器:负责执行屏幕转换,通常在线框的帮助下完成(可选但在应用程序中有这样的类很好)
Interactor:包含所有业务逻辑。Presenter 将在需要基于业务逻辑进行处理时调用 Interactor。
实体: POJO 类(简单的 Swift 对象或核心数据实体)。
现在问题来了:
如果我的假设是正确的,Presenter 应该是一个没有UIKit
访问权限的普通 Swift 类。
如果为真,假设我按下了我的一个按钮ViewControllerA
并且我需要在其上按下另一个按钮ViewControllerB
,显然ViewControllerA
会与它交谈PresenterA
并告诉它该按钮已被轻按,现在PresenterA
应该与它交谈RouterA
并告诉它按下ViewControllerB
。
因为路由器可以访问UIKit
我可以轻松地创建一个ViewControllerB
使用故事板实例或从 xib 的新实例,但为了推送该实例,我需要 ViewControllerA 的实例。
但PresenterA
不能持有ViewControllerA
对 in 函数的引用或作为参数传递,PresenterA
因为UIViewController
属于UIKit
和 Presenters 不应该有 UI 语句。
我能想到的可能解决方案:
解决方案1:
在创建路由器实例时,将相应ViewController
的实例作为其初始化(依赖注入阶段)的一部分传递,这样路由器将始终引用它所属的 ViewController
解决方案2:
让路由器声明其协议并在 ViewController 中实现它,并且每当需要对 ViewController 的引用时,都需要使用路由器的委托。但这与 VIPER 的规则相矛盾,即路由器不应该与 View 通信。
我想得直吗?我的假设是否正确?如果是,解决此问题的正确方法是什么,请建议
ios - VIPER design pattern in Swift configuring view
I have recently migrated to VIPER and while using this type of architecture came up with such question:
For instance, I have in designs long(2000pt height) UI with over 50 interface elements like labels, buttons, views, collections and so on and I need to add round corners and shadows to them.
Where should I configure its appearance? Should it be in View, or somehow in Presenter?
So far I have extended UIView to create a method to drop shadow.
Right now, what I have in View module is:
Is this a good practice? I'm interested in setting up commonality among the appearance of views as factored out from other methods. It seems more or less clear to me. Thanks in advance.