我正在参加「掘金·启航计划」
1. 前言: 设计模式可以在大型项目中有哪些可落地的优化?
- 笔者目前负责一个中大型iOS项目,用PPRows跑一下项目根文件,目前代码量约28W。
- 在这样一个大型项目中,我们组用了哪些方法对业务逻辑及代码架构进行解耦呢?
- 在这种代码量级的项目中,有哪些接地气的,可落地的优化经验呢?
- 在此抛砖引玉,欢迎大家一起相互探讨。
2. 落地: 采用适配器模式 更优雅的为陈旧业务代码扩展新功能.
2.1 适配器模式导图
2.2 适配器模式解耦, 核心类文件构成
2.3 适配器模式解耦, 核心代码文件讲解
2.3.1 定义一个继承自NSObject的适配器类AdapterTarget
- AdapterTarget.h文件
#import "OldTarget.h"
NS_ASSUME_NONNULL_BEGIN
/// 适配对象
@interface AdapterTarget : NSObject
/// 被适配老业务对象
@property (nonatomic, strong) OldTarget *oldTarget;
/// 对原有方法进行适配器包装
- (void)adapertRequest;
@end
NS_ASSUME_NONNULL_END
- AdapterTarget.m文件
//
// AdapterTarget.m
// appDesignPattern
//
// Created by JackLee on 2022/10/12.
//
#import "AdapterTarget.h"
@implementation AdapterTarget
- (OldTarget *)oldTarget {
if (!_oldTarget) {
_oldTarget = [[OldTarget alloc] init];
}
return _oldTarget;
}
- (void)adapertRequest {
NSLog(@"新增额外处理A");
[self.oldTarget oldOperation];
NSLog(@"新增额外处理B");
}
@end
- 久经考验的处理业务逻辑的旧类
OldTarget OldTarget.h文件
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface OldTarget : NSObject
/// 久经考验的旧处理方法
- (void)oldOperation;
@end
NS_ASSUME_NONNULL_END
OldTarget.m文件
#import "OldTarget.h"
@implementation OldTarget
- (void)oldOperation {
NSLog(@"久经考验的旧处理方法");
}
@end
2.3.2 实际业务使用适配器模式示例
//
// ViewController.m
// appDesignPattern
//
// Created by JackLee on 2022/9/21.
//
#import "ViewController.h"
#import "AdapterTarget.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 测试适配器模式
[self testAdapter];
}
- (void)testAdapter {
AdapterTarget *adapterTarget = [AdapterTarget new];
[adapterTarget adapertRequest];
}
发文不易, 喜欢点赞的人更有好运气👍 :), 定期更新+关注不迷路~
ps:欢迎加入笔者18年建立的研究iOS审核及前沿技术的三千人扣群:662339934,坑位有限,备注“掘金网友”可被群管通过~