2017-12-01 22 views
0

私は1歳のレガシープロジェクトを他のチームから開発しました。プロジェクトでは、「Utils」というフォルダが見つかりました。このフォルダには、多くのXxxxHelper.swiftソースコードファイルがあります。これらのヘルパーは、サードパーティのポッドもラッピングしています。ポッドKeychainSwiftをラップKeychainHelper.swiftXxxxHelperはどのようなデザインパターンですか?

例:CocoaPods "支店"

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]) 
    } 
} 

他のヘルパーをラップDeepLinkHelper 。 PhotoHelper.swiftは再びポッドチューンに

質問をラップTrackingHelper.swiftポッドTOCropViewControllerや他のネイティブキット をラップ:これらのデザインパターンは何
?また、ネイティブSDKやサードパーティのSDKとキットをラップすることのメリットは何ですか?

答えて

1

ヘルパークラスは、通常、Facadeおよび/またはAdapterパターンの実装として機能します。 実際には、Helperポストフィックスを使用する代わりに、パターンの名前を使用してこれらのクラスに名前を付ける方がよいでしょう。

実際、主な考え方は許容されますが、命名はデザインパターンを伝えません。

2

「ラッパー」パターンとは、基本的に特定の機能を包み込み、異なるインターフェースを提供します。この「グループ」のデザインパターンは、アダプタ、ファサード、デコレータ、プロキシです。

  • ファサード:彼らは、彼らの意図が異なるが、その背後
  • アダプタを提供操作の複雑さを隠し、クライアントへの単純なインタフェースを提供するために使用される2つの互換性のないインターフェースがそれらを変更することなく一緒に動作することを可能にします内部構造
  • デコレータ:同じクラスのオブジェクトの動作に影響を与えずにオブジェクトに静的または動的に新しい機能を追加できるようにする
  • プロキシ:機能を表現するためにクラス(プロキシ)を使用する別のクラス
関連する問題