问题标签 [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 回答
4553 浏览

ios - 基于 iOS 的项目实现 MVC、MVVM 和 VIPER 的真实场景

任何人都可以解释为基于 iOS 的项目实现 MVC、MVVM 和 VIPER 的真实场景吗?我正在寻找一些示例来解释我们应该在哪里使用 MVC、MVVM 和 VIPER。

提前致谢。

0 投票
3 回答
628 浏览

ios - cellForRowAtIndexPath 中的很多 Switch 案例

我有一个关于使用硬编码数据设置表格视图的问题。有时,当您需要显示不是从 DATA MODEL 层接收到的数据,而是存储为硬编码信息时,开发人员会遇到这种情况。

我的意思例如,当您构建设置屏幕时,可能会有一些 UITableViewCell,例如:

CustomTableViewCellName - 配置数据:占位符名称/姓氏、图标。

CustomTableViewCellPhone - 配置数据:电话占位符、图标。

CustomTableViewCellLogout - 配置数据:注销/退出文本、图标。

假设我有 3 个表格视图部分,每个部分包含 5 个不同的单元格,我在上面作为不同案例的示例进行了描述。

如果我们将在

如您所见,没有 DATA MODEL 只有占位符和图标图像将作为标签、textviews 图像视图等的默认数据存储在 UITableViewCell 中。我在这里没有说模型,而是关于模型 USER 例如存储用户姓名,姓氏等。我的意思是我需要在某处存储一些默认数据,也许在字典中。实际上占位符只是一个占位符,尽管它有一个 TEXT 并且 TEXT 是一个数据 =)

在这种情况下,我们有用于配置视图的默认状态的数据和将用作模型 USER 的数据。

我担心的是我会有一个大开关和非常大的视图控制器。

我想创建一些方法,这些方法将在其中使用 indexPath.row 来表示带有开关的部分:

并将这些方法移动到将为我返回一个单元格的交互器。我知道 Interactor 应该只准备数据并将其通过 Presenter 推送到视图。

也许我想多了一个问题。我只是不想在 VC 中有一个大开关 =) 我知道没有正确的解决方案。但也许有人面对它。

在我的情况下,数据是我想要在某处配置以防止过载视图控制器的默认单元格。是的,单元格是数据可能看起来很疯狂,但看看包含 1000 行配置代码的 ViewControllercellForRowAtIndexPath也很疯狂 =)

0 投票
2 回答
611 浏览

ios - 在具有 VIPER 架构的应用程序上更新 NSManagedObject

在执行 VIPER 架构的应用程序上,建议使用 NSObject 而不是 NSManagedObject (Interactor) 来处理实体。因此 NSManagedObject 在 PONSO 中被“转换”以使用。问题是,如果我修改 PONSO 中的属性,我如何更新核心数据?

谢谢你。

0 投票
4 回答
2833 浏览

ios - iOS VIPER:表单验证码放在哪里?

看了很多关于干净的iOS架构VIPER的文章,我明白了主要目的:关注点分离。

我目前将它用于我的项目。我有模块,每个模块都由视图、交互器、演示者、实体和路由器(带有情节提要)分割。

我有一个模块:地址和一个子模块 Add 用于添加地址页面。

所以,我的协议视图由我的 UIViewController 实现。视图控制器包含所有弱 IBOutlet 标签和文本字段(用于新地址表单)。

地址表单包含几个字段,例如:

  • 人的名字和姓氏
  • 邮政编码
  • 国家
  • 状态
  • 电话
  • 电子邮件
  • ETC...

在我的例子中,演示者只是将用户交互依赖于执行 API 调用的交互器。

但是,在执行 API 调用之前,我想预先验证表单以避免消耗无用的网络资源。

我需要检查例如:

  • 国家的内容并告诉视图如果为空则该字段是必需的...
  • 电子邮件的格式并告诉视图该字段无效...

我的问题是,我可以将表单验证代码放在哪里?

应该使用哪个 VIPER 组件来完成这项工作?

先感谢您!

0 投票
3 回答
748 浏览

ios - Two view controllers with similar functionality VIPER

I'm currently trying to implement VIPER-architecture in my project, and there is some questions I encountered with.

I have two modules in my app, that have some similar functionality (they both have imagePicker and ability to upload media to server, that implemented absolutely the same for both screens).

My question is how could I reuse this similar functionality in both modules? Trouble is that my imagePicker has many methods declared in Interactor that handle different events while selecting and uploading image (such as didUploadMediaFile(), didFailToUploadMediaFile(), uploadMediaFile() and so on).

Should I create third module with this functionality and then somehow subclass my other modules from it? Or maybe there is a better way of doing it?

0 投票
1 回答
12911 浏览

android - 如何理解 VIPER 清洁架构?

我最近发现了VIPER 清洁架构,并开始寻找在 Android 平台上应用此架构的示例教程。然而,我只发现了一些让我感到困惑的示例项目,这就是为什么我想通过一个简单的例子来了解 VIPER 的基本原理。我想知道是否有人可以在上面分享一些好的教程。

0 投票
3 回答
3115 浏览

objective-c - 无法将数据发送到 VIPER 中的另一个模块

如何在 VIPER 中将数据从模块 A 发送到模块 B?我使用路由器 A,其中包含模块 B 的信息,并尝试将此信息发送到视图控制器 B 或演示者 B。最好的方法是什么?

0 投票
2 回答
625 浏览

design-patterns - VIPER 架构中 NSFetchedResultsController 的位置在哪里?

VIPER中,与 MVC 不同,NSFetchedResultsController 的角色和位置没有那么明确定义。

把它放在交互器上是否正确?

0 投票
6 回答
8914 浏览

ios - iOS 使用 VIPER 和 UITableView

我有一个包含表视图的视图控制器,所以我想问我应该把表视图数据源和委托放在哪里,它应该是一个外部对象还是我可以在我的视图控制器中写它,如果我们说 VIPER 模式。

通常使用模式我这样做:

在 viewDidLoad 我向演示者请求一些流程,例如self.presenter.showSongs()

Presenter 包含交互器,并且在 showSongs 方法中我从交互器请求一些数据,例如:self.interactor.loadSongs()

当歌曲准备好传回视图控制器时,我再次使用演示者来确定该数据应如何在视图控制器中显示。但是我的问题是我应该如何处理表格视图的数据源?

0 投票
1 回答
342 浏览

ios - 清洁架构:服务器上的交互器逻辑

我一直在玩Clean ArchitectureVIPER

昨天有朋友问我为什么不把Interactor逻辑放在服务器上,把处理后的数据同步到iOS客户端,而不是发送原始数据在Interactor. 这将有很多好处,因为能够随意更改逻辑,在多个客户端(例如 iOS 和 Android)上复制的代码更少等。

例如,假设我们有一个Profiles 列表和一个Posts 列表。每个帖子都有一个图像和一个 profileID。

假设我们想要一个显示所有帖子图像的表格视图的屏幕,当用户点击帖子时,我们在单独的屏幕上显示相应的配置文件。在配置文件中,我们将显示该配置文件发布的名称和所有图像。

如果我们将逻辑留在客户端,我们将像这样同步数据:

然后我们将有一个ShowPostsInteractor只返回所有帖子的数据和一个ShowProfileInteractor,它将过滤帖子的数据以仅从该配置文件中获取帖子,然后它将一些数据返回到视图,例如:

第二种选择是将此逻辑保留在服务器上,在这种情况下,同步数据将是:

(注意添加imageURLsin profiles

并且ShowProfileInteractor只会将配置文件数据按原样传递给视图,因为它不再需要过滤帖子(这是由服务器完成的)。

当然,第二种方法复制了一些数据,但由于它只是字符串,所以这不是很相关。

我经常看到第一种方法。所以我的问题是,为什么我不采用第二种方法(在服务器上保留尽可能多的逻辑),并且可能从客户端删除所有交互器,让控制器直接访问网关,因为不会处理数据?