标签: viper-architecture

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

我阅读了许多关于干净的iOS架构VIPER的文章,我理解主要的主题:关注点的分离.

我目前用它来做我的项目.我有模块,每个模块由视图,交互者,演示者,实体和路由器(与故事板)分开.

我有一个模块:地址和子模块添加添加地址页面.

所以,我的UIViewController实现了我的协议View.视图控制器保存所有弱IBOutlet标签和文本字段(用于新地址表单).

地址表单包含以下几个字段:

  • 人的名字和姓氏
  • 邮编
  • 国家
  • 电话
  • 电子邮件
  • 等等...

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

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

我需要检查一下例如:

  • 国家的内容,并告诉视图如果空的话需要字段...
  • 电子邮件的格式并告诉视图该字段无效...

我的问题是,我在哪里可以提交表单验证码?

应该填写哪个VIPER组件?

先感谢您!

architecture ios viper-architecture

5
推荐指数
2
解决办法
2004
查看次数

在 Clean Architecture 中使用 NSFetchedResultsController

我已经在没有太多运气的情况下寻找了答案。这个问题几乎相同,但答案不是很清楚(至少对我来说!): 它是 VIPER 架构中 NSFetchedResultsController 的位置?

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

core-data ios swift viper-architecture clean-architecture

5
推荐指数
1
解决办法
1034
查看次数

通知如何适应 iOS VIPER 架构?

我正在查看 VIPER 架构,我想知道应用程序中的通知会去哪里。我使用 Realm 本地数据库,它能够在模型更新时发送通知。通知是从 INTERACTOR --> PRESENTER --> VIEW 广播的还是从其他地方广播的?

architecture ios swift viper-architecture

5
推荐指数
1
解决办法
485
查看次数

VIPER 架构:模块中的子模块

我有一个 VIPER 模块 ( SubjectList),我想在其中使用更通用的HeaderModuleaSubjectListCollectionModule和 a BlockModule。在什么时候我会合乎逻辑地添加HeaderModule?

我可以包括在模块SubjectListViewModel,但我还可以使它们在SubjectListView通过界面生成器,使用实例化它们xibs。推荐什么?

viper ios swift viper-architecture

5
推荐指数
1
解决办法
749
查看次数

单元测试 VIPER 协议

在阅读了有关此问题的几篇帖子和文章后,我仍然对如何在 VIPER 架构中测试方法(例如使用 Swift)感到困惑。

如果我有这个代码:

演讲者班

protocol InteractorToPresenterProtocol: class {

    func showInfo(info: Info)
}

class Presenter {

    private var interactor: PresenterToInteractorProtocol?

    init() {}

    func makeSomeStuffInPresenter() {

        // make some stuff 
        ...
        interactor?.makeSomeStuffInInteractor()
    }
}

extension Presenter : InteractorToPresenterProtocol {

    func showInfo(info: Info) {

       print(info)
    }    
}
Run Code Online (Sandbox Code Playgroud)

交互器类:

protocol PresenterToInteractorProtocol: class {

    func makeSomeStuffInInteractor()
}

class Interactor {

    private var presenter: InteractorToPresenterProtocol?

    init() {}
}

extension Interactor : PresenterToInteractorProtocol {

    func makeSomeStuffInInteractor() {

       // make some stuff 
       ...
       presenter?.showInfo(info)
    }    
} …
Run Code Online (Sandbox Code Playgroud)

unit-testing swift viper-architecture

4
推荐指数
1
解决办法
3182
查看次数

如何使用VIPER artechiture设置异步图像加载?

应用程序的本质是一个UITableView,当用户向下滚动tableView时,它会在每一行显示UIImages.如何在不破坏VIPER架构的情况下将图像加载到单元格中?

--VC code--

func cellForRowAtIndexPath...... {
    var cell = dequeueCellWithIdentifier.....

    //Method 1
    cell.image = outputInteracter.loadImage("someHttpImageLink")

    //Method 2. - using a completion block
    outputInteracter.loadImage(anImage -> {
        cell.image = anImage
    }
}
Run Code Online (Sandbox Code Playgroud)

上述两种方法似乎都打破了VIP,因为演示者没有参与,并且在VIP的边界之间没有传递任何结构

您如何建议使用TableView的UIImages进行异步调用以使用VIP下载图像(不阻止主线程)?我可以让呼叫模式像这样,但我对第4步感到困惑:

  1. VC - > interacterOutput.loadImage("someLink")
  2. Interacter - >完成图像的工作,并将UIimage发送给演示者
  3. Presenter - > UIImage已经为VC格式正确,因此将信息传递回VC
  4. VC - >我应该如何最好地设置代码,以便单元格知道它的图像准备好了?我不想重新加载整个tableView

任何帮助将不胜感激.

viper-architecture

3
推荐指数
1
解决办法
963
查看次数

iOS应用程序VIPER架构 - 有多少数据管理器?

我在VIPER建筑模式的背景下寻找这个问题的答案-

如果你有一个可与既有的应用程序web apidatabase多少dataManagers,你应该有一个,两个或三个?

案件

一个) dataManager

b) APIDataManagerLocalDataManager

c) dataManager,APIDataManagerLocalDataManager

在哪里

A)interactor一个单一的会谈dataManager,讨论对您的任何服务(远程或本地).

B)interactor知道的区别localremote信息-并呼吁无论是APIDataManagerLocalDataManager,分别跟远程和本地服务.

c)interactor与将军的唯一对话dataManager,将军dataManager随后与APIDataManager和将会谈LocalDataManager

编辑

可能没有确定的解决方案.但任何输入都将非常感激.

architecture ios viper-architecture

2
推荐指数
1
解决办法
540
查看次数

基于iOS的项目实现MVC vs MVVM与VIPER的真实场景

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

提前致谢.

model-view-controller mvvm cocoa-design-patterns ios viper-architecture

2
推荐指数
1
解决办法
4373
查看次数

IOS VIPER:协议如何帮助进行单元测试?

我对 VIPER 架构中协议的好处有点困惑。我了解 DI(依赖注入)通过协议实现,有助于避免对象之间的直接依赖 - 我同意。

但我正在从使用的角度来看真正的好处,一个例子可能是 - 特别是协议如何帮助单元测试(测试交互器部分)受益。

我们不能通过方法回调的 using 块来实现相同的目的吗?希望有人可以通过一些例子帮助我从使用的角度理解

干杯

objective-c ios viper-architecture

2
推荐指数
1
解决办法
2735
查看次数

这个 Xcode 项目文件夹层次结构最可能的设计模式是什么?

这是项目文件夹层次结构。我想知道在这种情况下使用了什么设计模式。到目前为止,我发现它最有可能是Clean-Swift Architecture (VIP)

未知模式

以下是示例 Clean-Swift 项目的文件夹层次结构。

干净的斯威夫特

xcode viper ios swift viper-architecture

2
推荐指数
1
解决办法
417
查看次数