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

ios - 如何使用 Builder Module (UIKit) 在 SwiftUI 中全屏显示视图控制器?

我是iOS开发新手,遇到了一些麻烦...

我使用带有架构的 SwiftUI - VIPER/B。这是我在 ios 开发中使用此堆栈的第一步。

我从这里获取基础项目

所以我有构建我的模块的函数,它返回给我ViewController

之后,我在我的Router

viewController.present除了 as之外,我没有想到任何其他方式来调用构建器模块,而且weak var viewController: UIViewController!在原始模板中已经宣布了,提示viewController.present

结果,当我在我的中调用这个函数时View,我得到了我的ViewController模态,但我无法获得全屏演示。

功能在我的Presenter

功能在我的View

如何以全屏模式呈现此内容?我想像默认一样显示segue NavigationController:当新ViewController出现时从左到右。另外,我尝试使用NavigationLink,但参数目标必须获取类型View,而不是ViewController......它给了我一个错误:

类型 '()' 不能符合 'View';只有结构/枚举/类类型可以符合协议

0 投票
0 回答
689 浏览

ios - 这是在 VIPER、swift、iOS 中为 Interactor 编写单元测试的正确方法吗?

我有一个小的排序功能,Interactor它需要一组Strings 并对其进行排序并通知Presenter. 该功能按预期工作。

现在我只是尝试用 unit test覆盖该功能。Unit Test Class所以我为我创建了一个Interactor并进行MockedInteractor Output如下测试。我做对了吗?

单元测试源代码的屏幕截图

我们不应该在里面结束测试吗testFunction,在这种情况下是在里面testSortFunction()

notifySortedNames()这在里面触发,Mock Interactor Output Class我在里面测试了用例。我想这是错误的方式。

我怎样才能在里面实现这个场景的测试testFunction()?感谢您对此的帮助。

交互者

交互测试类

谢谢!!

0 投票
1 回答
248 浏览

ios - VIPER 实体和存储它们的位置

所以,我目前正在将一个非常大的项目重构为 VIPER 架构,它的大部分模块视图都是 UITableViews。我发现了互联网上几乎所有关于 VIPER 和 UITableView 的话题,但有一件事仍然不清楚:我应该将 ViewModel 存储在哪里,我真的需要它们吗?

例如,我有一个带有 UITableViewController 的简单 VIPER 模块,我需要显示项目列表。Interactor 使用我解码为 Codable 结构的一些项目的数组来获取 JSON。然后我通过 InteractorOutput 协议将这些结构的数组从交互器推回演示器。现在我有两个问题:

  1. 我是否必须使用另一个数据模型 (ViewModel) 在视图中显示数据,还是可以使用现有的 Codable Struct?

  2. 我应该在哪里存储我的 ViewModel?在 Presenter 内部并从 View 中请求数据,如下所示:presenter.getData(forItemAt: indexPath.row)。或者我必须将 ViewModel 数组推送到 View 并要求 View 显示它们?

0 投票
1 回答
740 浏览

swift - 不兼容的块指针类型发送与 ViperMcFlurry 的 'id 问题

我在我的项目中使用 ViperMcFlurry 多年来没有出现任何问题,并且使用 XCode 12 beta 6 它返回Incompatible block pointer types sending错误。我尝试了各种方法来修复它,但没有机会。它返回

我尝试做的是

我有

RamblerModuleBetaInput.h. 我也有

RamblerViperModuleInput.h

0 投票
1 回答
114 浏览

objective-c - Objc - 扩展 - TableView 委托

我正在尝试在一个小型 objc 项目中遵循 Viper 模式。我得到每个部分的不同角色,没有特别的问题。但是,我遇到问题的部分是当我尝试将我的 tableview 的委托/数据源移动到另一个文件时,因为我读到这是应该这样做的。我关注了那个帖子:iOS using VIPER with UITableView但我无法编译。

这里的问题是我不知道如何在 Objc 中进行扩展。我尝试了很多语法,但都没有奏效。我如何(通过示例)在 VIPER“MyViewController.m/h”和“MyTableViewController.m/h”中正确拥有“MyTableViewController”是“MyViewController”的扩展?这意味着我们将<UITableViewDelegate>在“MyViewController.h”中看到。

非常感谢你的帮助。这可能是一个多余的问题,但我没有为我的扩展问题找到明确的答案(如果有的话)。

0 投票
1 回答
97 浏览

java - VIPER 架构中的编辑文本验证在哪里进行(Android)

我读了几篇关于 VIPER 的文章。因此,利用我从中获得的知识,我为我的登录活动构建了一个使用 viper 架构的示例应用程序。在这个活动中,我有 2 个 Edittexts(用户名和密码)和一个按钮。一旦用户单击登录按钮,我需要验证用户名和密码是否不为空,如果为空,我应该显示一条错误消息,要求用户输入数据。

我的问题是,我可以在哪里放置我的 Editext 验证码?

哪个 VIPER 模块处理这项工作?

0 投票
0 回答
38 浏览

swift - 毒蛇/CleanSwift。将跨多个视图使用的可重用业务逻辑放在哪里?

我想开始使用 CleanSwift 架构,尤其是 VIPER 对其的解释,但我有一些疑问。

示例:我有购物车视图。当一些新项目添加到购物车时,该视图会更新数据(计数增加)。当我按下它时 - 打开“CartViewController”。我在应用程序中多次使用该视图,并且仅在一个中使用代码库。

问题:如何通过 VIPER 实现该视图作为对 CleanSwift 架构的解释?我需要在VIPER 的视图/UI 区域中与每个场景的每个视图对应的某处实现业务逻辑吗?如何将 VIPER 中的业务逻辑关注点与视图 UI 关注点分开,以便 VIPER 抑制大规模视图控制器反模式或架构错误?但是,当业务逻辑相同时,如何在实现该业务逻辑的重用的同时做到这一点?

0 投票
1 回答
365 浏览

swift - Swift 5 VIPER 模板生成器(权限被拒绝)

我找到了这个viper 模板生成器。我吸入了所有东西,但现在我遇到了许可问题。

当我尝试执行swift template generate MyModule --use viper-module命令时,我得到了这个:

在此错误之前,我得到了另一个:

不确定我是否走对了,但我只是将 swift-template 文件夹复制到了路径中/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/

0 投票
2 回答
57 浏览

swift - 模块作为 Xcode 项目中的独立框架

假设有一个包含 50 个 Swift 模块的 Xcode 项目。一个模块是由7 个文件组成的VIPER模块:

  • 视图控制器
  • 主持人
  • 交互者
  • 网络管理器
  • 路由器
  • 实体

有多个50*7 = 350文件要编译,我真的想将它们分成 50 个框架,每个模块一个,以提高解耦和重新编译速度。

请记住,我不想为所有 , 等创建单个模块EntitiesRouters而是一个模块包含实例化和使用该“视图”所需的所有文件(通常为 7 个文件)。

在应用程序中拥有如此多的框架有什么缺点吗?

它可以增长到 70、80、90 甚至 100 个框架。

干杯

0 投票
1 回答
232 浏览

ios - 使用 VIPER 和服务快速处理错误责任

我发现这篇文章如何构建毒蛇模块。对我来说有一件事仍然存在疑问,我不知道哪个元素负责处理响应,或者该处理是否应该由 2 个或更多 V、I、P、E 或 R 元素部分处理。

所以我们通常在 VIPER 循环中有下一个队列

  1. ViewController 请求演示者在 viewDidLoad 上做 smth,例如在后台下载 smth。
  2. Presenter 请求 Interactor func 做一些辅助工作,例如调用某些服务
  3. 服务执行一些 NSURLSession 请求并回调交互器。

如果您熟悉 VIPER,那么您可以看到很明显的队列我跳过了一些协议和 VIPER 元素扩展。

在上面的链接中,我们有一个函数:

如您所见,它不会在完成时返回原始响应,而是对数据和错误进行一些检查。

我的问题是这合法吗?我认为违反了单一职责或至少违反了 VIPER。

检查错误的最佳位置是什么,将一些数据构建器注入到一个人发帖的服务函数中是否更好。

或者,也许我们需要用原始响应回电,并允许演示者对错误、数据空等进行所有需要的检查。请不要阻止这个问题,因为这至少对于查看您的评论很重要。