DecouplingKitモジュール間のデカップリングのためのスキーム

3251 ワード

DecouplingKit
Podfile
platform :ios, '7.0'
pod 'DecouplingKit', '~> 0.0.2'

DecouplingKitはモジュール間のデカップリングのためのスキームである.
Appチームの人数が一定の人数に増加すると、ビジネスラインが分離され、モジュール化された作業によって各ビジネスラインが分離され、各チームが独立して作業できるようになります.共通の案はcocoapodsを採用して業務コードをそれぞれ各倉庫に分解することであり、1つの業務ラインは1つの業務倉庫であり、もちろんより大きな分割力があれば、1つの小さなモジュールは1つのcocoapods倉庫である.これにより,トラフィックラインは物理的経路から隔離され,各トラフィックラインは他のトラフィックラインのコードを勝手に呼び出すことができない.しかし,必ず呼び出すならヘッダファイルを導入して呼び出すことができるので,本質的には各業務倉庫間の結合は解除されていない.
結合解除の一部はトラフィックラインページ間のジャンプであり,現在流行しているスキームはrouterによって行われている.他の部分は無視しやすいのが業務ライン間呼び出し方法,属性などであるため,DecouplingKitという中間層がこの問題を解決している.DecouplingKit以降のビジネスロジックは下図を見ることができます.
DecouplingKitには、サービスリストDKServiceManagerをロードするクラスDKServiceManagerが1つしかありません.plist、サービスは1つの業務の中でクラスが提供するprotocolで、中には他の業務が呼び出す方法、属性などがあります.DKService.plistにはサービスとimplがあり、サービスはprotocolに対してimplはprotocolを実現するクラスです.
たとえば,業務1では業務2を呼び出す方法が必要であり,DKServiceManagerがprotocolで対応する業務2のimplを見つければよい.ここでprotocolはBussinessPublicService倉庫に集中しており、ここではいかなる倉庫にも依存せず、protocolの中の方法はパラメータと戻り値に対してUImit、Foundationなどのシステムフレームワークのタイプを通じており、独自のmodelクラスは必要ありません.業務2に対する実装クラスは,対応する方法を実装すればよい.
DKServiceManagerは、インスタンスを返すこともクラスメソッドを返すこともできます.もちろん、親プロトコルDKServiceProtocolを実装したsharedInstanceメソッドでも、単一のインスタンスを返すこともできます.
DecouplingKitはBeeHiveに基づいて改造され、BeeHiveはAppDelegate管理とモジュール呼び出しデカップリングの2つの部分を含み、DecouplingKitはモジュール呼び出しデカップリングの部分に専念し、DecouplingKitはBeeHiveより軽量なクラスが1つしかなく、呼び出しインスタンスとクラスメソッド、属性をサポートしている.対比デカップリングのもう1つの方法は、例えばCTMediatorによって、対応するインタフェースを中間層(対応BussinessPublicService)によって公表し、インタフェースがCTMediator(runtime)を呼び出して実現することであり、これも非常に良い方法である.
使用
デフォルトのDKServicesを登録します.plistサービスリスト
[[DKServiceManager sharedInstance] registerLocalServices];

カスタムパスのサービスリストの登録
[[DKServiceManager sharedInstance] registerLocalServicesWithServiceConfigName:@"DecouplingKit.bundle/DKService"];

インスタンスを作成します.このBussiness 2 ServiceProtocolに対応するクラスがsharedInstanceメソッドを実装すると、単一のインスタンスが生成され、対応するインスタンスメソッドが呼び出されます.
id bussiness2 =[[DKServiceManager sharedInstance] createInstance:@protocol(Bussiness2ServiceProtocol)];

NSDictionary *data =[bussiness2 fetchBussiness2DataWithName:@"DecouplingKit" age:@"1"];

クラスを作成し、対応するクラスメソッドを呼び出します.
 Class Bussiness2 = [[DKServiceManager sharedInstance] createClass:@protocol(Bussiness2ServiceProtocol)];
 [Bussiness2 callClassMethod];

独自のビジネス・ライン・クラスのサービス・プロトコルの作成
@protocol Bussiness2ServiceProtocol 
@property (nonatomic,copy) NSString *name;
- (NSDictionary *)fetchBussiness2DataWithName:(NSString *)name age:(NSString *)age;
+ (void)callClassMethod;
@end

テキストリンク:https://github.com/coderyi/DecouplingKit/blob/master/Documents/Readme_cn.md
備考:1コードを実行するとき、DecouplingKitプロジェクトを開き、DKServicesを見つけます.plistは次のコードを追加します(そうでないとエラーが発生します.Bussiness 2 ServiceProtocol protocol does not been registed、Business 2のメソッドを呼び出すことができません):

    service
    Bussiness2ServiceProtocol
    impl
    Bussiness2Manager