Swift 配置视图中的 VIPER 设计模式
VIPER design pattern in Swift configuring view
我最近迁移到 VIPER,在使用这种类型的架构时提出了这样的问题:
例如,我的设计长(2000pt 高)UI 有超过 50 个界面元素,如标签、按钮、视图、集合等,我需要为它们添加圆角和阴影。
我应该在哪里配置它的外观?它应该在 View 中,还是在 Presenter 中?
到目前为止,我已经扩展了 UIView 来创建一个投影方法。
现在,我在视图模块中的内容是:
override func viewDidLayoutSubviews() {
doctorsNearCollection.backgroundColor = UIColor(white: 1, alpha: 0)
newsMayBeInterestedCollection.backgroundColor = UIColor(white: 1, alpha: 0)
recentSavedNewsCollection.backgroundColor = UIColor(white: 1, alpha: 0)
setupCharts()
scheduleMetting.dropShadow()
scheduleMetting.layer.cornerRadius = 5
monthlyPerformaceBackground.dropShadow()
monthlyPerformaceBackground.layer.cornerRadius = 5
firstMeeting.dropShadow()
firstMeeting.layer.cornerRadius = 5
firstMeetingNumber.layer.cornerRadius = self.firstMeetingNumber.frame.size.width / 2
secondMeeting.dropShadow()
secondMeeting.layer.cornerRadius = 5
secondMeetingNumber.layer.cornerRadius = self.secondMeetingNumber.frame.size.width / 2
thirdMeeting.dropShadow()
thirdMeeting.layer.cornerRadius = 5
thirdMeetingNumber.layer.cornerRadius = self.thirdMeetingNumber.frame.size.width / 2
seeAllMeetings.dropShadow()
seeAllMeetings.layer.cornerRadius = 5
searchForDoctors.dropShadow()
searchForDoctors.layer.cornerRadius = 5
seeAllSavedNews.dropShadow()
seeAllSavedNews.layer.cornerRadius = 5
}
这是一个好习惯吗?
我有兴趣在从其他方法中提取出来的视图外观之间建立共性。这对我来说似乎或多或少是清楚的。
提前致谢。
- 如 https://TheSwiftDev.com/the-ultimate-viper-architecture-tutorial 中所述,UI 细节和构造必须隔离在视图区中,并且永远不会出现在演示区中,因为视图区 handles/quarantines 所有 UI details/concepts 作为内部事务,而演示者区域 handles/quarantines 所有纯应用程序域 details/concepts 作为内部事务。
- 本着永不言败的精神,UI 元素的“圆角和阴影”唯一出现在演示区的情况是 app-domain 应用程序本身就是一个 UI-generator 或 UI-editor 或 UI-designer 工具,其中一些下游(-app's)UI (即,不是 this 应用程序的 UI)是此应用程序的应用程序域。因此,除非您的应用程序是用于 UI 开发的 UI 设计环境,否则 UI 东西永远不会超出视图区域(即使是其他应用程序的 UI 例外情况)东西,不是当前应用程序的 UI 东西)。
- 仅仅因为一些以 UI 为中心的代码需要作为视图之间的共性而被分解出来,这并不意味着它会得到 VIPER 处理以闯入其他 4 个区域 {interactor、presenter、entities , router} 作为表达共性的一种方式。视区本身可以有层。其中一个层是 2 个或更多视图之间的通用基础结构库。 (另一个这样的层可能是一个外观,它将以 UI 为中心的事件转换为以应用程序域为中心的事件,这些事件将跨区域传递给演示者来处理,而不是作为以 UI 为中心的事件,而是作为一个应用程序-域事件独立于它在 UI 中的表示方式。)如果需要将某些函数、方法、过程、子例程或协程分解为视图区域中多个视图之间的共性,则保留分解出的函数、方法、过程、子例程或协程在视图区内的库中,而不是任何其他 IPER 区。
我最近迁移到 VIPER,在使用这种类型的架构时提出了这样的问题:
例如,我的设计长(2000pt 高)UI 有超过 50 个界面元素,如标签、按钮、视图、集合等,我需要为它们添加圆角和阴影。
我应该在哪里配置它的外观?它应该在 View 中,还是在 Presenter 中?
到目前为止,我已经扩展了 UIView 来创建一个投影方法。
现在,我在视图模块中的内容是:
override func viewDidLayoutSubviews() {
doctorsNearCollection.backgroundColor = UIColor(white: 1, alpha: 0)
newsMayBeInterestedCollection.backgroundColor = UIColor(white: 1, alpha: 0)
recentSavedNewsCollection.backgroundColor = UIColor(white: 1, alpha: 0)
setupCharts()
scheduleMetting.dropShadow()
scheduleMetting.layer.cornerRadius = 5
monthlyPerformaceBackground.dropShadow()
monthlyPerformaceBackground.layer.cornerRadius = 5
firstMeeting.dropShadow()
firstMeeting.layer.cornerRadius = 5
firstMeetingNumber.layer.cornerRadius = self.firstMeetingNumber.frame.size.width / 2
secondMeeting.dropShadow()
secondMeeting.layer.cornerRadius = 5
secondMeetingNumber.layer.cornerRadius = self.secondMeetingNumber.frame.size.width / 2
thirdMeeting.dropShadow()
thirdMeeting.layer.cornerRadius = 5
thirdMeetingNumber.layer.cornerRadius = self.thirdMeetingNumber.frame.size.width / 2
seeAllMeetings.dropShadow()
seeAllMeetings.layer.cornerRadius = 5
searchForDoctors.dropShadow()
searchForDoctors.layer.cornerRadius = 5
seeAllSavedNews.dropShadow()
seeAllSavedNews.layer.cornerRadius = 5
}
这是一个好习惯吗? 我有兴趣在从其他方法中提取出来的视图外观之间建立共性。这对我来说似乎或多或少是清楚的。 提前致谢。
- 如 https://TheSwiftDev.com/the-ultimate-viper-architecture-tutorial 中所述,UI 细节和构造必须隔离在视图区中,并且永远不会出现在演示区中,因为视图区 handles/quarantines 所有 UI details/concepts 作为内部事务,而演示者区域 handles/quarantines 所有纯应用程序域 details/concepts 作为内部事务。
- 本着永不言败的精神,UI 元素的“圆角和阴影”唯一出现在演示区的情况是 app-domain 应用程序本身就是一个 UI-generator 或 UI-editor 或 UI-designer 工具,其中一些下游(-app's)UI (即,不是 this 应用程序的 UI)是此应用程序的应用程序域。因此,除非您的应用程序是用于 UI 开发的 UI 设计环境,否则 UI 东西永远不会超出视图区域(即使是其他应用程序的 UI 例外情况)东西,不是当前应用程序的 UI 东西)。
- 仅仅因为一些以 UI 为中心的代码需要作为视图之间的共性而被分解出来,这并不意味着它会得到 VIPER 处理以闯入其他 4 个区域 {interactor、presenter、entities , router} 作为表达共性的一种方式。视区本身可以有层。其中一个层是 2 个或更多视图之间的通用基础结构库。 (另一个这样的层可能是一个外观,它将以 UI 为中心的事件转换为以应用程序域为中心的事件,这些事件将跨区域传递给演示者来处理,而不是作为以 UI 为中心的事件,而是作为一个应用程序-域事件独立于它在 UI 中的表示方式。)如果需要将某些函数、方法、过程、子例程或协程分解为视图区域中多个视图之间的共性,则保留分解出的函数、方法、过程、子例程或协程在视图区内的库中,而不是任何其他 IPER 区。