LPDMvvmKit 源码学习笔记-01

转载 http://blog.csdn.net/mmoaay/article/details/51763100

前言

最近有幸见识一个基于 ReactiveCocoa 实现的 iOS MVVM 框架。其中一些在我看来有些大费周章的做法着实让我吃惊,以至于觉得有必要对这个框架的源码进行一次深入的学习和分析。因为这个框架的实现有些复杂,所以我会以系列的方式来记录我的学习过程和分析结果,希望对大家有所帮助。

关于 LPDMvvmKit

简介

一个基于 ReactiveCocoa 实现的 iOS MVVM 框架。

一些门槛

  • 熟悉 MVVM 架构思想并有一定的实践
  • 熟练使用 ReactiveCocoa 框架

作者

稻子_Aadan

GayHub

https://github.com/foxsofter/lpd-mvvm-kit

项目分析

项目结构文件

  • Class-LPDMvvmKit LPDMvvmKit 库代码 
    • Additions-对 Cocoa 框架功能的一些扩展,方便开发
    • Controls-自定义控件 
      • LPDAlertView
      • LPDPopupView
      • LPDToastView
    • Mvvm-核心代码(关键) 
      • Models-MVVM 框架的 M
      • Services-
      • ViewControllers-
      • ViewModels-MVVM 框架的 VM
      • Views-MVVM框架的 V
  • LPDMvvmKit-Demo 
    • ViewControllers
    • ViewModels
    • Views
    • Services
    • Models
  • Pods CocoaPods-第三方库 
    • AFNetworking
    • CocoaSecurity-加密解密库
    • DateTools-日期时间功能增强库
    • Kiwi-TDD开发框架
    • Masonry
    • MJRefresh
    • ReactiveCocoa-响应式编程框架(关键)
    • ReactiveViewModel-基于 ReactiveCocoa 实现的 ViewModel 库
    • SDiPhoneVersion-iPhone设备信息获取库
    • UICKeyChainStore
    • YYModel

通过对项目结构和文件的分析,得出初步的一个分析结果:

优势:

  • 功能齐全,使用者通过本框架可以迅速完成常见 App 的基础部分搭建。

可改进:

  • 有些模块的划分不是特别清晰。比如网络请求模块,应该可以独立出来做一个单独的库。
  • Additions 和 Controls 部分可以从 LPDMvvmKit 中独立出来,方便灵活配置。
  • Example 代码和库本身的代码的标识可以更明确一些。

库依赖

分析库依赖最好的方式就是 podspec 文件,通过 LPDMvvmKit 的 podspec 我们可以看到:

#
#  Be sure to run `pod spec lint LPDMvvmKit.podspec' to ensure this is a
#  valid spec and to remove all comments including this before submitting the spec.
#
#  To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html
#  To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/
#

Pod::Spec.new do |s|
  s.name         = "LPDMvvmKit"
  s.version      = "0.4.2"
  s.summary      = "mvvm"

  s.description  = <<-DESC
                   a framework of mvvm.

                   * Think: Why did you write this? What is the focus? What does it do?
                   * CocoaPods will be using this to generate tags, and improve search results.
                   * Try to keep it short, snappy and to the point.
                   * Finally, don't worry about the indent, CocoaPods strips it!
                   DESC

  s.homepage     = "https://github.com/foxsofter/lpd-mvvm-kit"
  s.license      = { :type => "MIT", :file => "LICENSE" }

  s.author       = { "foxsofter" => "foxsofter@gmail.com" }
  s.platform     = :ios, "7.0"

  s.ios.deployment_target = "7.0"

  s.source = { :git => "https://github.com/foxsofter/lpd-mvvm-kit.git", :tag => "#{s.version}", :submodules => true }

  s.requires_arc = true

  s.subspec 'Additions' do |ss|
    ss.ios.deployment_target = '7.0'
    ss.source_files = 'Classes/Additions/*.{h,m}'
    ss.dependency 'AFNetworking'
    ss.dependency 'ReactiveCocoa', '2.5'
    ss.dependency 'DateTools'
  end
  s.subspec 'Controls' do |ss|
    ss.ios.deployment_target = '7.0'
    ss.dependency 'LPDMvvmKit/Additions'
    ss.dependency 'SDiPhoneVersion'
    ss.dependency 'Masonry'
    ss.source_files = 'Classes/Controls/LPDPopupView/*.{h,m}','Classes/Controls/LPDAlertView/*.{h,m}','Classes/Controls/LPDToastView/*.{h,m}'
  end
  s.subspec 'Mvvm' do |ss|
    ss.ios.deployment_target = '7.0'
    ss.dependency 'LPDMvvmKit/Additions'
    ss.dependency 'LPDMvvmKit/Controls'
    ss.dependency 'AFNetworking'
    ss.dependency 'ReactiveCocoa', '2.5'
    ss.dependency 'ReactiveViewModel'
    ss.dependency 'UICKeyChainStore'
    ss.dependency 'YYModel'
    ss.source_files = 'Classes/Mvvm/*.{h,m}','Classes/Mvvm/Services/*.{h,m}','Classes/Mvvm/Services/LKUserDefaults/*.{h,m}','Classes/Mvvm/Models/*.{h,m}','Classes/Mvvm/ViewControllers/*.{h,m}','Classes/Mvvm/ViewModels/*.{h,m}','Classes/Mvvm/Views/*.{h,m}'
  end
end
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

它的库依赖包括两个部分,一个是内部依赖,一个是第三方依赖。

内部依赖包括两个部分:

  • Additions
  • Controls

第三方依赖包括:

  • AFNetworking
  • ReactiveCocoa
  • ReactiveViewModel
  • UICKeyChainStore
  • YYModel
  • DateTools
  • Masonry
  • SDiPhoneVersion

理论上除了 ReactiveCocoa 和 ReactiveViewModel 两个必须依赖的库,其它部分可以进行解耦并独立出来。(PS:该部分所做的分析只是一个初步的分析,并不能做为源码剖析的结论)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值