iOS老司机可落地的中大型iOS项目中的设计模式优化Tips_适配器模式

480 阅读2分钟

我正在参加「掘金·启航计划」

1. 前言: 设计模式可以在大型项目中有哪些可落地的优化?

  • 笔者目前负责一个中大型iOS项目,用PPRows跑一下项目根文件,目前代码量约28W。
  • 在这样一个大型项目中,我们组用了哪些方法对业务逻辑及代码架构进行解耦呢?
  • 在这种代码量级的项目中,有哪些接地气的,可落地的优化经验呢?
  • 在此抛砖引玉,欢迎大家一起相互探讨。

image.png

2. 落地: 采用适配器模式 更优雅的为陈旧业务代码扩展新功能.

2.1 适配器模式导图

image.png

2.2 适配器模式解耦, 核心类文件构成

image.png

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,坑位有限,备注“掘金网友”可被群管通过~