- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是第一次按照 VIPER 实现我的项目,我对它的实现有一些疑问。这是我到目前为止所做的:
1)实现登录页面
脚步
i)用户点击登录按钮(在 View Controller 上)。
ii)我有一个请求模型,其中存储“用户名”和“密码”。这是模型的结构:
struct Login{
struct Request{
var txt_email:String!
var txt_password:String!
}
struct Response {
var homeData:Dictionary<String,Any>
}
}
最佳答案
引用:https://medium.com/@javedmultani16/viper-architecture-viper-64f6cd91e6ec
我们开发人员基本上根据需求使用 MVC、MVP 或 MVVM 架构进行开发。选择哪种架构来开发应用程序很重要。影响软件架构选择的许多因素,如系统设计、需求、时间线等。
在 Viper 架构中,每个 block 对应于具有特定任务、输入和输出的对象。这与流水线中的 worker 非常相似:一旦 worker 完成了对一个对象的工作,该对象就会传递给下一个 worker ,直到产品完成。
V(查看) : View 负责 UI 更新并显示演示者告诉它的任何内容。
我(交互者) :Interactor负责从模型层获取数据,其实现完全独立于用户界面。所有业务逻辑都写在Interactor内部。例如。获取在交互器中编写的用户数据 API 调用。
P(主持人) :Presenter 扮演中间人的角色,它从交互中获取数据并传递给 View。 (可能是数据或任何用户操作)
E(实体) :基本上它包含交互器使用的对象模型。例如。学生、 friend 、大学等
R(路由器) :它包含应用程序的导航逻辑。例如。下一个按钮操作显示第二个屏幕。
此外,我使用了 PROTOCOL,其中包含应用程序特定模块的所有规则和工作流程。在 iOS 中,每个模块的所有协议(protocol)都写在单独的协议(protocol) swift 文件中。
此外,我使用了 PROTOCOL,其中包含应用程序特定模块的所有规则和工作流程。在 iOS 中,每个模块的所有协议(protocol)都写在单独的协议(protocol) swift 文件中。
让我们看看它的文件结构:
enter image description here
福利:
-所有模块都是独立的,所以 VIPER 非常适合大型团队。
-它使源代码更干净、更紧凑和可重用
- 更容易采用 TDD(测试驱动开发)
- 您可以轻松地向现有应用程序添加新功能,而无需更改其他模块。
- 它可以应用 SOLID 原则。
- 减少合并冲突的数量。
- 它使编写自动化测试变得容易,因为您的 UI 逻辑与业务逻辑分离
struct Person { // Entity (usually more complex e.g. NSManagedObject)
let firstName: String
let lastName: String
}
struct GreetingData { // Transport data structure (not Entity)
let greeting: String
let subject: String
}
protocol GreetingProvider {
func provideGreetingData()
}
protocol GreetingOutput: class {
func receiveGreetingData(greetingData: GreetingData)
}
class GreetingInteractor : GreetingProvider {
weak var output: GreetingOutput!
func provideGreetingData() {
let person = Person(firstName: "David", lastName: "Blaine") // usually comes from data access layer
let subject = person.firstName + " " + person.lastName
let greeting = GreetingData(greeting: "Hello", subject: subject)
self.output.receiveGreetingData(greeting)
}
}
protocol GreetingViewEventHandler {
func didTapShowGreetingButton()
}
protocol GreetingView: class {
func setGreeting(greeting: String)
}
class GreetingPresenter : GreetingOutput, GreetingViewEventHandler {
weak var view: GreetingView!
var greetingProvider: GreetingProvider!
func didTapShowGreetingButton() {
self.greetingProvider.provideGreetingData()
}
func receiveGreetingData(greetingData: GreetingData) {
let greeting = greetingData.greeting + " " + greetingData.subject
self.view.setGreeting(greeting)
}
}
class GreetingViewController : UIViewController, GreetingView {
var eventHandler: GreetingViewEventHandler!
let showGreetingButton = UIButton()
let greetingLabel = UILabel()
override func viewDidLoad() {
super.viewDidLoad()
self.showGreetingButton.addTarget(self, action: "didTapButton:", forControlEvents:.TouchUpInside)
}
func didTapButton(button: UIButton) {
self.eventHandler.didTapShowGreetingButton()
}
func setGreeting(greeting: String) {
self.greetingLabel.text = greeting
}
// layout code goes here
}
// Assembling of VIPER module, without Router
let view = GreetingViewController()
let presenter = GreetingPresenter()
let interactor = GreetingInteractor()
view.eventHandler = presenter
presenter.view = view
presenter.greetingProvider = interactor
interactor.output = presenter
关于ios - 在 iOS 中实现 VIPER 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44796176/
该应用程序的本质是一个 UITableView,当用户向下滚动 tableView 时,它会在每一行上显示 UIImages。我应该如何在不破坏 VIPER 架构的情况下将图像加载到单元格中? --V
1 介绍 Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。目前Star 26.6k, 它支持以下特性: 设置默认值
VerCors 中的一个错误生成了一些银色,看起来像: field f: Int method test(n: Int, x: Ref) requires n == 100 requires acc(
这是我的config.yaml文件 server: port: 5000 这是我使用毒蛇解码的逻辑 type Configurations struct { Server ServerCo
在iOS VIPER项目中,每个模块都需要调用远程服务(例如刷新 token +检查用户登录)。实现这一需求的最佳实践是什么? 每个模块可以有多个交互器吗? 或者我们应该在每个模块(交互器)中实现相同
我在使用 viper 时遇到问题,我已经通过 viper 方法分配了变量,所以当我尝试在任何函数中获取值时,我得到的是空值。有谁知道为什么会这样?任何其他变量初始化工作正常,但 viper GetSt
我用毒蛇 https://github.com/spf13/viper用于在我的 GO 应用程序中管理项目配置,以及将配置值解码为结构体。 var config c.Configuration //
我正在寻找 go 和 https://github.com/spf13/viper 的配置解析器似乎强烈推荐。 我很惊讶地发现配置文件默认没有经过验证。 Viper 解析文件并从中提取请求的值,但我找
我有一个类似于以下的 yaml 文件: ComplexItemList: - Name: First Complex item Date: Whenever StructItemList:
在VIPER设计模式,Interactor 应该返回可能被多个演示者操作使用的所有信息,还是我应该为每个演示者设置一个单独的结构? 在我的例子中,我有一张显示地点的 map 。要显示这些地点,我需要从
我正在按照 VIPER 设计模式在 Swift 中构建应用程序。 VIPER 包含四个组件: 1) 查看2)线框3) 主持人4) 交互器 我的常量将出现在哪个组件中以及如何出现? 最佳答案 如果你的意
假设我们必须每 10 秒更新一次数据。我们应该在哪里创建/存储计时器,它会在 VIPER 架构中的什么地方触发相关方法?ViewController 应该这样做并通知演示者吗?还是 Presenter
作为初学者,我曾经在 ViewControllers 中执行转场。此外,Apple 鼓励这种方法,因为 UIViewController 有方法 performSegue 和 prepareForSe
我正在将我的项目更改为 VIPER 模式。 我的主要观点有很多观察者。我找不到应该将我的观察员放在 VIPER 中的什么位置。 因为我不想让我的观察者出现在视野中。以前我有单独的观察者类,当有通知时,
考虑到VIPER结构 我有两个模块,A 和 B。第一个模块 A,通过演示者,想要执行一个必须在模块 B 中完成的 Action ,所以告诉它的线框去做。问题是,谁负责实例化整个模块( View 、交互
我正在尝试使用 viper ( see viper docs ) 读取 yaml 配置文件。但是我看不到一种方法来读取问题类型下的 map 值序列。我尝试了各种 Get_ 方法但似乎没有人支持这一点。
我有一个 yaml 配置文件,其中包含我的程序的所有设置。例如: something: enabled: true 我正在使用 https://github.com/spf13/viper获取
我正在尝试从配置中获取一些名称未知的组(稍后会获取更多)。 我是 golang 的新手,有点吃力。我正在使用 Viper,因为它支持 yaml、json 和 toml。 json 配置: {
有没有办法从加载的配置文件中删除键/值对? viper.Set("key", nil) 不工作 最佳答案 尝试 delete(viper.Get("path.to.key").(map[string]
我注意到这可能是 viper 尝试解码为结构时的错误。为了更好地解释它,请考虑以下内容: 我有一个如下所示的 cli 命令 dd-cli submit-bug --name "Bug 1"--tag
我是一名优秀的程序员,十分优秀!