问题标签 [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 投票
1 回答
34 浏览

ios - Segue 调用了两次 - IOS

VIP在我的项目中使用 from,当我将用户路由到另一个场景时,两次打开场景,我的路由器就像下面这样?如果您需要更多详细信息,请告诉我。谢谢

和:

在此处输入图像描述

0 投票
1 回答
309 浏览

android - 演示器中的 VIPER 注入交互器

我有一个 VIPER 架构的应用程序。我将 DI 与 dagger-2 一起使用,但我无法将交互器注入演示者。

我得到下一个错误:

我有下一个代码:

主视图 (Kotlin)

MainActivity (Kotlin)

MainPresenter (Kotlin)

主交互器 (Kotlin)

活动组件 (Java)

活动模块 (Java)

应用程序组件 (Java)

应用程序模块 (Java)

0 投票
1 回答
224 浏览

android - Clean Architecture - 简单的视图逻辑应该在 Presenter 上还是在 View 上?

我有一个简单的例子:

用户从日历中选择一个日期,然后在标签中设置该日期。当没有日期或选择了无效日期时,必须放置一个占位符。

我的问题是,这些清洁架构方法中哪一种更好?

1) 从 Presenter -> View 发送一个 Date 对象,对象可以为空。View 决定 date 是否为空,放置占位符文本,如果不是,格式化它。
View 完全根据收到的 Date 决定如何绘制界面

2)Presenter将格式化后的Date字符串发送给View,但如果为null,View设置占位符。 Presenter 将值格式定义为业务规则,但 View 决定数据如何以图形方式显示,因此 View 决定占位符文本和将被更改的组件。假设接口可能更改为 fe 占位符放置在另一个标签中并且日期字段留空

3) Presenter 指示 View 设置日期文本和设置占位符文本(只有 View 知道,因为它是静态文本)。 视图接收具体做什么事情。Presenter 确切地知道 View 有哪些组件并控制它们。但是静态文本是一个界面组件,因此 Views 决定设置哪个占位符文本。

4) Presenter 完全定义了将在 UI 中绘制的内容, View 只是一个连接 UI 组件的层,Presenter 确切或大部分知道 View 是如何绘制的

对我来说,Presenter 应该只管理来自 View 的整体输入和输出事件,让 View 对如何绘制事物、使用哪些格式甚至如何检索输入负全部责任,这样如果 UI 发生变化,主屏幕 i/o 使用案例将在 Presenter 中保持有效。

然而,我已经看到了给演示者更多控制权的代码示例,而 UI 只是绘制元素和捕获用户输入的框架方式。

0 投票
1 回答
193 浏览

ios - iOS离线首个app单一责任问题

我正在从我已经制作的在线应用程序切换到离线应用程序。

这是在线工作的方式:

我有 VIPER交互器,它从service请求数据。服务知道如何从API层请求数据。所以我有结果或错误的回调,并在积分器中处理它,然后在需要时更新本地存储。这里没有什么特别难的。

因此,所有元素、Interactor、Service 和 API 都是单一职责对象,并且只执行一项任务:

Interactor 处理 if 块逻辑来处理结果或错误并触发 Presenter 显示数据

API 的服务调用

API 调用 Alomofire 来处理请求的其余工作。

因此,现在在离线第一个应用程序中,我添加了RequestService,我在其中存储了所有请求,然后使用 Timer 发送它,以防连接在线。

所以现在我需要在某个地方重载单一职责来检查接下来的事情。

所以首先我需要检查可达性:

接下来我需要确保所有请求都已发送:

所以我认为有两种方法:

  1. 进行全局检查。就像提供API层来为我做这些检查并返回一些枚举Result(localData)或在为我返回结果或没有连接Result(serverData)后返回。Alamofire

  2. 或者第二个让交互器像这样进行这些检查:

    func getData(完成...){

    /li>

所以现在我们将对所有请求数据的交互进行所有相同的检查,但似乎我们没有打破单一责任,或者我走错了路?

0 投票
1 回答
93 浏览

swift4 - 如何为所有 UIKIt 覆盖一次方法

我想编写基于 VIPER 架构的 iOS 应用程序,所以我的目标是从路由器中获取 segue。我view.performSegue(withIdentifier: sender:)从路由器打电话,作为发件人我把关闭返回给我一个segue。

我想覆盖prepare(for: sender:)所有视图控制器的方法UIKit

实际上我明白,我可以从所有具有该方法的类继承并覆盖它,但我想这样做一次,例如在协议中,然后在任何地方使用它。

有什么建议么?

0 投票
1 回答
232 浏览

ios - 如果我通知操作已完成,我应该使用 PublishSubject 吗?

我正在学习Viperw/ RxSwift

我想通知我在我Presenter的.viewDidLoadViewController

为此,我有以下内容:

加载视图后,我正在调用presenter?.viewDidLoad.onNext(())

然后我可以在我的演示者中触发任何操作,例如调用 myrouter以确保配置导航或我的interactor.

我应该PublishSubject为此使用 a 吗?还是RxSwift有更适合的类型?

我觉得这种方法意味着我最终会得到类似的东西

0 投票
0 回答
187 浏览

swift - SceneDelegate 中的路由器

我有一个在新 Xcode 11 中不起作用的路由器,它作为 appDelegate 工作。现在我需要转换到另一个 SCENE,我尝试了在这里找到的所有问题,但它仍然不起作用。以下是无法转换到预期下一个场景的代码:

}

0 投票
1 回答
392 浏览

swift - 使用 VIPER 架构更新视图中的标签

我是 VIPER 的新手,我在该架构中构建了最简单的演示,但是我遇到了麻烦,因为 View/View Controller 中的 UILabel 没有更新。这是相关代码:查看:

主持人:

交互者:

主持人:

看法:

print(text) 返回值,但视图本身没有更新。

我尝试在主线程上进行更新,但没有运气。我见过一些具有类似模式的项目(在 ViewController /label/backgroundColor 等中更新视图),但我无法弄清楚我的代码有什么问题。

该示例在 GitHub https://github.com/veliborsantic/VIPER-simple-example上可用 。类似的项目在https://github.com/smalam119/live-news-viper上可用,它按预期运行。

编辑 1: 我意识到 viewDidLoad 函数被调用了两次。我在 viewDidLoad() 和 updateLabel (text: String) 中都设置了打印消息,如下所示:

如果我在 AppDelegate 中删除 initialViewController 的配置,viewDidLoad 会调用一次,但不会加载模块。

编辑 2 / 已解决 经过研究,我必须做 3 件事:告诉我不想通过情节提要初始化控制器,所以:1.关闭“是初始视图控制器”2.在部署信息中分离 Main 和 3.所有代码来自AppDelegate 移动到 func scene 中的 Scene Delegate(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)

0 投票
2 回答
473 浏览

ios - 使用 SwiftUI 从 Wireframe 创建一个新的 VIPER 模块

我正在尝试使用 SwiftUI 实现 VIPER。首先,我UIHostingController(rootView)从 Wireframe 返回一个 UIKit VC(),直到我意识到在导航中,当演示者告诉 Wireframe 呈现一个 SwiftUIView时,我无法通过UIViewController一个NavigationLink.

遇到这个问题,我试图让 Wireframe 协议返回一个 SwiftUI View,但这似乎是不可能的

协议“视图”只能用作通用约束,因为它具有Self或相关的类型要求

如何定义一个返回 SwiftUI 的函数View

0 投票
1 回答
54 浏览

ios - 在使用 VIPER 的许多控制器上使用的功能在哪里更好?

我在我的 Swift 应用程序中使用 VIPER 模式。我需要一个在很多控制器中执行的函数来打开 cardViewStyle。我不知道在哪里添加这个功能更好......

可以是用例吗?一个交互器?,常见的......我无法想象 VIPER 和干净的架构将如何处理这样的功能。

目前该函数在视图控制器、演示器和线框中,因为只调用一次。

该功能将类似于:

谢谢!