我正在参与「启航方案」

1. 前言: 规划形式能够在大型项目中有哪些可落地的优化

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

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

2. 落地: 选用桥接形式 应对同一页面网络数据接口来回变化的场景, 进行逻辑解耦.

2.1 桥接形式导图

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

2.2 桥接形式解耦, 中心类文件构成

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

2.3 桥接形式解耦, 中心代码文件解说

2.3.1 定义一个笼统的基类BaseObjectA

  • BaseObjectA.h文件
#import <Foundation/Foundation.h>
#import "BaseObjectB.h"
NS_ASSUME_NONNULL_BEGIN
@interface BaseObjectA : NSObject
/// 桥接形式的中心完成
@property (nonatomic, strong) BaseObjectB *objB;
/// 获取数据
- (void)handle;
@end
NS_ASSUME_NONNULL_END
  • BaseObjectA.m文件
#import "BaseObjectA.h"
@implementation BaseObjectA
/**
A1 --> B1、B2 2种对应
A2 --> B1、B2 2种对应
*/
- (void)handle {
  // override to subclass 交给详细的子类复写
  [self.objB fetchData];
}
@end
  • 详细的页面A1 ObjectA1
  • ObjectA1.m文件
#import "ObjectA1.h"
@implementation ObjectA1
- (void)handle {
  // before 事务逻辑操作
  [super handle];
  // after 事务逻辑操作
}
@end
  • 不同接口的笼统父类BusinessB.h文件
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface BaseObjectB : NSObject
- (void)fetchData;
@end
NS_ASSUME_NONNULL_END
  • 不同接口的笼统父类BusinessB.m文件
#import "BaseObjectB.h"
@implementation BaseObjectB
- (void)fetchData {
  // override to subclass 交给子类完成
}
@end
  • 详细使用的接口B2的完成ObjectB.m文件
#import "ObjectB2.h"
@implementation ObjectB2
- (void)fetchData {
  // B2详细的逻辑处理
  NSLog(@"B2接口获取数据详细的逻辑处理 === ");
}
@end

2.3.2 实践事务使用桥接形式示例

//
// ViewController.m
// appDesignPattern
//
// Created by JackLee on 2022/9/21.
//
#import "ViewController.h"
#import "ObjectA1.h"
#import "ObjectA2.h"
#import "ObjectB1.h"
#import "ObjectB2.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
  [super viewDidLoad];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
  // 测验桥接形式
  [self testBridgeFetchData];
}
- (void)testBridgeFetchData {
  /**
  根据实践事务判断使用哪套详细数据
  A1 --> B1、B2 2种对应
  A2 --> B1、B2 2种对应
  */
  // 创建一个详细的ClassA
  BaseObjectA *objA = [ObjectA1 new];
//  BaseObjectA *objA = [ObjectA2 new];
  // 创建一个详细的ClassB
//  BaseObjectB *objB2 = [ObjectB1 new];
  BaseObjectB *objB2 = [ObjectB2 new];
  // 将一个详细的ClassB2 指定给笼统BaseClassB
  objA.objB = objB2;
  // A列表使用B2的接口获取数据
  [objA handle];
}

发文不易, 喜爱点赞的人更有好运气 :), 定时更新+关注不走失~

ps:欢迎参加笔者18年建立的研究iOS审核及前沿技术的三千人扣群:662339934,坑位有限,备注“网友”可被群管经过~