重构点

作者: 可能是老曹 | 来源:发表于2017-05-25 14:53 被阅读6次

播放器部分

播放器部分模块化,播放器作为一个独立的模块,

现阶段代码

- (void)buildPlayerByPlayType:(DQPlayerType)type isFirstBuild:(BOOL)isFirst {
    if (self.playerView) {
        [self.playerView stop];
        self.playerView = nil;
    }
    switch (type) {
    case DQPlayerType_default: {
        self.playerView = self.Leplayer;
    }
    break;

    case DQPlayerType_pptv: {
        self.playerView = self.pptvPlayer;
    }
    break;

    case DQPlayerType_tencent: {
        self.playerView = self.tencentPlayer;
    }
    break;

    default:
        break;
    }

    if (!isFirst) {
        [self _firstTimeSetup];
    }
    [self.contentView addSubview:self.playerView];
}

- (void)_firstTimeSetup {
    //这步是为了解决什么bug么?
    if (self->_bUserWantBack) {
        return;
    }
    
    //属于播放器初始化的属性
    self.playerView.bIsLocalFile = self.bIsLocalFile;
    
    //
    [UIApplication sharedApplication].idleTimerDisabled = YES;

    NSError *error   = nil;
    BOOL     success = [[AVAudioSession sharedInstance]
                    setCategory:AVAudioSessionCategoryPlayback
                          error:&error];
    if (!success) {
        // Handle error here, as appropriate
        //这里要加LogError
    }
    
    //这个函数才是初始化播放器的
    [self _setupPlayerRelated];
    
    //这个函数属于上报相关,不属于播放器
    [self resetReportItemsNeedAddUUID:YES];
    
    //这个函数包含了上报的参数整理、上报、UI和按钮状态、播放等
    [self _setupCurrentVideoAndPlay];

    //上报用的参数
    self->_startTime = [NSDate date];
    
    //读取播放历史
    if (self.lastPlayTime <= 0.0f) {
        [self initLastPlayTimeWithHistoryRecords];
    }
    
    //根据不同的播放状态来处理播放历史
    if (self.bVideoPlayable) {
        [self recordHistoryForIndex:self.curPlayIndex passedDuration:self.playerView.timeplayed totalDuration:self.playerView.duration];
    } else {
        [self recordHistoryForIndex:self.curPlayIndex passedDuration:self.lastPlayTime totalDuration:self.playerView.duration];
    }
    
    //监听App生命周期的一些事件,这部分也可以归于播放器模块,用接口或者block把时机暴漏给外层。
    [self _setupGlobalObservers];
}
@protocol DQOnlinePlayDataProtocol
- (NSString *)url;
- (NSString *)title;
@end

@protocol DQPlayerProtocol
//获取
- (UIViewController*)playerViewController;
- (void)refreshPlayerWithData:(id<DQOnlinePlayDataProtocol>)data;
- (void)refreshPlayerWithLiveData:(id<DQLivePlayDataProtocol>)data;
- (void)refreshPlayerWithLocalData:(id<DQLocalPlayDataProtocol>)data;

//状态获取
- (BOOL)isScreenLocked;
- (NSTimeInterval)playerInterval;
- (NSTimeInterval)duration;

//监听事件,这也可以独立出另外一个协议
- (void)playerStatusDidChanged:(DQPlayerStat)status;
.....

@end

方法命名

[self _setupCurrentVideoAndPlay];

  • 拆分函数,函数功能和函数名统一意义
  • 函数方法命名形式,-规范

上报时机化

上报的时机化(需要讨论),需要业务层支持。这里在乐搜之前执行过,由于上报点和业务点往往不是同一个点,有时需要增加很多方法跨多层传递;这里提出用通知来发消息上报,上报点只发时机,接受的上报business负责整理参数并发送给上报引擎。

- (void)LesoReportEvent_Homepage_PageView:(LesoHomePageDataModel*)model {
    LesoPadReportParams*params = [[LesoPadReportParams alloc]init];
    params.module =@"home_page";
    [[LesoPadReportEngine sharedLesoEngine]reportHomepage:params];
}

            //首页pv上报
            LesoSearchResultReportModel * model = [[LesoSearchResultReportModel alloc] init];
            model.eventType = LesoReportEvent_Homepage_PageView;
            [[NSNotificationCenter defaultCenter] postNotificationName:LESOREPORT_NOTIFICATION object:model];
            [_errorView removeFromSuperview];

同时只存在一个播放器,当需要播放其他视频时刷新播放器和详情页即可。

[self pushNewDetail:releData];

变成

 [self refresWithData:releData];

相关文章

  • 重构点

    播放器部分 播放器部分模块化,播放器作为一个独立的模块, 现阶段代码 方法命名 [self _setupCurre...

  • 重构老业务接口的思考

    最近在重构一些老得业务接口,在重构中有了一些思考;进而通过几个关键点说下重构的心得;1:重构的判定界限2:重构的切...

  • Android 如何将既有项目重构成 MVP 模式

    最近在做公司项目的重构工作,主要重构点包括: 网络请求框架由 HttpURLConnection + Handle...

  • 代码重构专题(转载)

    代码重构(一):函数重构规则代码重构(二):类重构规则代码重构(三):数据重构规则代码重构(四):条件表达式重构规...

  • 重构代码之美

    什么是重构; 为什么要重构; 什么时候重构; 怎样避免重构的现象; 重构的难点在哪里; 如何来实施代码重构; 重构...

  • 30 - 重构之代码解耦

    重构可以分为大规模高层重构(简称“大型重构”)和小规模低层次重构(简称“小型重构”)。大型重构是对系统、模块、代码...

  • 产品知识--meten在线

    时空重构 加强情感介入 用户体验:①解决用户痛点②创造尖叫点③制造存在感,让用户乐于分享 营销:价值重构 产品篇 ...

  • 重构、重构、重构

    【待完成】

  • 第二十二节 重构代码 下

    分析了Layer类与PublicData文件,发现没有需要重构的点,下面就对剩余的两个类进行重构: 01.Scre...

  • 重构

    为何重构? 1.重构改进软件设计 2.重构使软件更容易理解 3.重构帮助找到bug 4.重构提高编程速度 何时重构...

网友评论

      本文标题:重构点

      本文链接:https://www.haomeiwen.com/subject/qkczxxtx.html