我从其他开发团队获得了一个有一年历史的遗产项目。在项目中,我找到了一个名为“Utils”的文件夹。在这个文件夹中,有许多XxxxHelper.swift源代码文件。这些助手还包装了一些第三方豆荚。
实施例: DeepLinkHelper包装CocoaPods“Branch”
import Foundation
import Branch
class DeepLinkHelper {
static func handleDeepLink(params: [AnyHashable:Any]?, error: Error?) {
if error == nil {
if let clickedBranch = params?["+clicked_branch_link"] as? Bool, let referringLink = params?["~referring_link"] as? String, let referringUrl = referringLink.toURL(), clickedBranch {
let endpoint = referringUrl.lastPathComponent
switch(endpoint) {
case "debugLink":
#if ENV_DEBUG
NotificationCenter.default.post(name: Notification.Name(rawValue: InternalNotifications.backgroundAlertUser), object: nil, userInfo: ["title":"Branch Link","message":"Success!"])
#endif
break
case "connaccts":
// Display connected accounts
NotificationCenter.default.post(name: Notification.Name(rawValue:InternalNotifications.switchToViewController), object: nil, userInfo:["destination": ViewControllerNames.connections])
break
case "guestinvite":
// Request server to add source account as unvalidated connection
if let gValue = params?["g"] as? String {
handleGuestInvite(gValue)
}
break
default:
break
}
}
print("BranchIO-DLparams: \(String(describing:params))")
}
else {
print("BranchIO-Error: \(error!)")
}
}
static func handleGuestInvite(_ gValue: String) {
NotificationCenter.default.post(name: Notification.Name(rawValue:InternalNotifications.switchToViewController), object: nil, userInfo:["destination": ViewControllerNames.main,"reset":true,"guestInviteData":gValue])
}
}
其他帮助者:
KeychainHelper.swift包装了KeychainSwift。 PhotoHelper.swift包装pod TOCropViewController和其他本机工具包 TrackingHelper.swift包装pod Tune
再次提问:
这些设计模式是什么?并且,包装本机或第三方SDK和工具包有什么好处?
答案 0 :(得分:2)
所谓的“包装”模式基本上都包含某些功能并提供不同的界面。这个“组”的设计模式是适配器,外观,装饰器和代理。他们的意图不同:
答案 1 :(得分:1)
Helper类通常用作Facade和/或Adapter模式的实现。 实际上,使用模式的名称命名这些类而不是使用Helper post-fix肯定会更好。
事实上,主要思想是可以接受的,但命名并没有传达设计模式。