东半球
最高效的 Protocol<=>Service 中间件,解决中间件的占用内存问题。
OC/Swift 项目均可使用。
蘑菇街路线
- 优点:方案成熟,能解决组件依赖
- 可多端复用 ✅
- 缺点:需要注册维护URL表,传递类型单一,编译阶段无法发现潜在BUG 🙅♂️
- 注册存在内存占用问题
-
优点:不需要注册和内存占用 ✅
-
缺点:编译阶段无法发现潜在BUG,必须遵守命名规则 🙅♂️
-
优点:接口与实现分离,编译阶段就能发现问题 ✅
-
缺点:需要注册和内存占用
- 此
repo
简易组件已解决✅
- 此
- 优点:同上
Protocol-Class
方案,但移除了注册逻辑,解决占用内存问题。 - 缺点:需要遵从命名规范。(后续更新解决方案
doing
,参考最下方计划
部分)- 此缺点可通过维护Plist表做映射关系处理(二次改造)。
-
ProtocolServiceKit 负责组件中间件
-
ZDModuleKit:负责组件生命周期管理
- 后续更新
To run the example/SwiftExample project, clone the repo, and run pod install
from the Example directory first.
- AccountBusiness <=> PlayBusiness
组件交互: VIP和播放业务复杂后,只公开Protocol文件决定业务对外能力
Class <LFLVipProtocol> vipService = ServiceClassWithProtocol(LFLVipProtocol);
if (vipService && [vipService isCurrentUserVipStatus]) {
Class <LFLPlayProtocol> playService = ServiceClassWithProtocol(LFLPlayProtocol);
[playService playMiniVideo];
} else {
NSLog(@"Error:LFLVipProtocol notfound service Class");
}
-
对外业务能力如果未实现,运行期会触发断言处,便于发现问题。
-
recommended convention
-
XXX
Service -
XXX
Protocol
-
ProtocolServiceKit is available through CocoaPods: ProtocolServiceKit. To install it, simply add the following line to your Podfile:
deprecate
pod 'ProtocolServiceManger',"~>1.0.0"
// recommended
pod 'ProtocolServiceKit',"~>1.1.0"
@objc public protocol SwiftTestProtocol {
static func demo()
}
import Foundation
class SwiftTestService:SwiftTestProtocol {
static public func demo() {
print("SwiftTestService")
}
}
- 缓存项目最常用到组件Protocol 和Service 引入白名单 机制
- 建议为10个以内,KIt内部维护一张表(均存String),用于直接返回ServiceClass
- 此方案为可选方案。
- 部分项目存在Service需要为单利场景,建议使用。
- 引入
map
机制,可以不按照约定规则来提供Service Class,项目初始化提供map表机制,解决强制命名类规范问题,可自由自定义。
DevdragonLi, [email protected]
ProtocolServiceKitis available under the MIT license. See the LICENSE file for more info.