APP3.0技术方案

一、2.0时代

1.经历的坑

  1. 交易流水列表“/app/200/trade/gettradedetail_all”筛选时间查询返回速度过慢
  2. 订单查询不能扫条形码
  3. 交易流水列表显示了“交易失败”状态订单
  4. 订单详情“交易失败”订单优惠金额显示信息错误
  5. 覆盖安装概率性无法及时获取device_token,导致收不到推送。
  6. iOS12.1以上系统无法语音播报
  7. 新款手机XR尺寸问题,导致导航栏实际位置不匹配
  8. 终端管理新终端类型无法及时更新

2.做过的有效优化策略

  1. 接口需要针对优化
  2. 放开扫条形码限制
  3. 默认不查询“交易失败”状态订单
  4. “交易失败”订单优惠金额逻辑优化(之前使用字段错误)
  5. 覆盖安装会马上调用登录接口,加上从友盟推送换为阿里推送导致,偶发性时间,从2.0升级版本到3.0不会有这种问题。
  6. app本地存有大量音频文件,iOS12.1以上系统语会根据金额获取对应音频文件,通过sounds字段发送给手机,让手机捕获对应音频进行语音播报
  7. 新款手机样式尺寸问题只能通过适配处理

a.框架

MVC

b.组件

  1. 阿里云HTTPDNS AlicloudHTTPDNS
  2. 阿里云推送 AlicloudPush
  3. 网络加载库 AFNetworking
  4. 页面布局 Masonry
  5. 网络图片 SDWebImage
  6. 模型对象库 JSONModel
  7. 调试工具 FLEX
  8. 二维码条形码 LBXScan
  9. 表格刷新 MJRefresh
  10. 数据库 FMDB

3.非业务场景

1 阿里云统计 AlicloudMAN

二、3.0时代

1.针对2.0时代的填坑策略

  1. UI和UE的革新
  2. 模型类的严格封装,减轻Controller压力
  3. 将版本适配提高至iOS9.0使用
  4. 优化覆盖安装处理
  5. 优化消息推送策略

2.继续挖坑

a.框架

MVC --- RxSwift+Moya+HandyJSON

APP3.0.png

Swift

  • Swift注重安全性,OC注重灵活性。
  • Swift更易于维护,文件分离后结构更清晰。
  • Swift更加安全,它是类型安全的语言。
  • Swift代码更少,简洁的语法,可以省去大量冗余代码
  • Swift速度更快,运算性能更高。
  • Swift是静态类型语言,而OC是动态类型语言。

MVC

  • 控制器(Controller)--> 负责转发请求,对请求进行处理。
  • 视图(View) --> 界面设计人员进行图形界面设计。
  • 模型(Model) --> 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。

RxSwift

  • RectiveX 机制(由 RxSwift基于Swift 实现)的出现,让程序里的事件传递响应方法做到统一。将之前那些常用的事件传递方法(比如:delegatenotificationtarget-action 等等),全部替换成 Rx 的“信号链”方式。
  • 如果使用 MVVM 开发模式话,通过 RxSwift 可以获得更加方便的数据绑定的方法,使得 MVVM 开发更加如虎添翼。
//数据绑定
    musicListViewModel.data
            .bind(to: tableView.rx.items(cellIdentifier:"musicCell")) { _, music, cell in
                cell.textLabel?.text = music.name
                cell.detailTextLabel?.text = music.singer
            }.disposed(by: disposeBag)
       //点击列表
   tableView.rx.modelSelected(Music.self).subscribe(onNext: { music in
            print("你选中的歌曲信息【\(music)】")
        }).disposed(by: disposeBag)

Moya

  • Moya 是一个基于 Alamofire(Swift 语言中的 AFNetworking) 的更高层网络请求封装抽象层。它可以对我们项目中的所有请求进行集中管理,方便开发与维护。同时 Moya 自身也提供了对 RxSwift 的扩展。

  • 首先定义一个 provider,即请求发起对象。往后我们如果要发起网络请求就使用这个 provider。

  • 接着声明一个 enum 来对请求进行明确分类,这里我们定义两个枚举值分别表示获取频道列表、获取歌曲信息。

  • 最后让这个 enum 实现 TargetType 协议,在这里面定义我们各个请求的 url、参数、header 等信息。

    let DouBanProvider = MoyaProvider<DouBanAPI>() 
    //请求分类
    

public enum DouBanAPI {
case channels //获取频道列表
case playlist(String) //获取歌曲
}
//请求配置
extension DouBanAPI: TargetType {
//服务器地址
public var baseURL: URL {
switch self {
case .channels:
return URL(string: "https://www.douban.com")!
case .playlist(_):
return URL(string: "https://douban.fm")!
}
}

//各个请求的具体路径
public var path: String {
    switch self {
    case .channels:
        return "/j/app/radio/channels"
    case .playlist(_):
        return "/j/mine/playlist"
    }
}
 
//请求类型
public var method: Moya.Method {
    return .get
}
 
//请求任务事件(这里附带上参数)
public var task: Task {
    switch self {
    case .playlist(let channel):
        var params: [String: Any] = [:]
        params["channel"] = channel
        params["type"] = "n"
        params["from"] = "mainsite"
        return .requestParameters(parameters: params,
                                  encoding: URLEncoding.default)
    default:
        return .requestPlain
    }
}

}

 
`HandyJSON`

- `HandyJSON` 是一个用于 `Swift` 语言中的 `JSON` 序列化/反序列化库。
- 将`JSON`映射到对象
- 将对象映射到`JSON`
- 嵌套对象(独立,在数组或字典中)
- 映射期间的自定义转换
 

class Channel: HandyJSON {
var name: String?
var nameEn:String?
var channelId: String!
var seqId: Int?
var abbrEn: String?

required init(){}

func mapping(mapper: HelpingMapper) {
    mapper <<< self.channelId <-- "channel_id"
}

}



`RealmSwift `
  
 - `RealmSwift`是基于`Realm`对`RxSwift`扩展
 - `Realm` 不是基于 `Core Data`,也不是基于 `SQLite` 封装构建的。它有自己的数据库存储引擎。
 - `Realm` 还提供了一个轻量级的数据库查看工具(`Realm Browser`)。可以用它进行一些简单的编辑操作(比如插入和删除操作) 

`Base`
 
 - `BaseModel` 基于 `HandyJSON `将基础返回类和请求类进行封装
 - `RxNetworkService` 基于 `Moya`将网络请求封装处理
 

class RxNetworkService {

    //获取频道数据
    func loadChannels() -> Observable<[Channel]>{
        return EPOSProvider.rx.request(.channels)
            .mapJSON()
            .asObservable()
            .mapObject(type: Douban.self)
            .map{$0.channels ?? []}
    }
}
 - `BaseViewController` 基础控制器类,将常用功能封装,例:页面统计等



### b.组件 
1. 阿里云HTTPNS
    - 官方`Demo`对`iOS`使用`HTTPDNS`的例子是基于`OC`的,介绍过于简单,目前还无结合`Swift`的网络请求库`Moya`一起配合使用。
2. 阿里云推送 `AlicloudPush`
3. 页面布局 `SnapKit`
4. 网络加载 `Moya`
5. `Swift` 中响应式编程 `RxSwfit`
6. 请求网络图片 `Kingfisher`
7. 模型库 `ObjectMapper`
8. 调试工具 `FLEX`
9. 扫码工具 `swiftScan`
8. 其它...

## 3.非业务场景
1 阿里云统计 `AlicloudMAN`
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容