XxxxHelper是什么样的设计模式?

时间:2017-12-01 03:32:10

标签: design-patterns

我从其他开发团队获得了一个有一年历史的遗产项目。在项目中,我找到了一个名为“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和工具包有什么好处?

2 个答案:

答案 0 :(得分:2)

所谓的“包装”模式基本上都包含某些功能并提供不同的界面。这个“组”的设计模式是适配器,外观,装饰器和代理。他们的意图不同:

  • facade:用于为客户提供简单的界面,隐藏其背后提供的操作的复杂性。
  • adapter:允许两个不兼容的接口协同工作而不改变其内部结构
  • decorator:允许静态或动态地将新功能添加到对象,而不会影响同一类对象的行为
  • proxy:类(代理)用于表示并允许访问另一个类的功能

答案 1 :(得分:1)

Helper类通常用作Facade和/或Adapter模式的实现。 实际上,使用模式的名称命名这些类而不是使用Helper post-fix肯定会更好。

事实上,主要思想是可以接受的,但命名并没有传达设计模式。