app统计模块设计-面向对象的方式

作者: windgo | 来源:发表于2016-07-24 17:18 被阅读543次

app统计模块设计-面向对象的方式

需求

1. 多家统计

研发运营一个优秀的App, 要准确的统计APP的下载, 留存和活跃, 掌握各个功能的使用情况, 这通常需要使用第三方的统计服务. 市场上有很多家统计服务, 比如友盟, Google统计, Flurry统计, Facebook统计 等等.
但是各家的服务的统计算法, 准确性, 稳定性各不相同. 为了更准确, 可靠的进行统计, 需要为App增加多家统计功能.

2. 统计服务

一类统计是统计APP的新增, 活跃, 留存. 这类统计, 需要的是在APP启动的时候, 启动统计服务.
第二类是统计事件. 需要在某个事件发生的时候, 向统计服务发送事件数据. 这个需要在APP各个位置增加相关调用.

面向对象分析和设计

1. 面向对象分析

通过观察需求, 可以找出以下有效的的名词和动词

  • 名词:
    统计服务, 友盟, Google统计, Flurry统计, Facebook统计, 事件(包括名称和数据)
  • 动词
    启动(服务), 发送(事件)

2. 面向对象设计

名词转换为类, 动词转换为方法, 找出继承关系, 利用封装和多态, 得到的设计如下:

  • 类图


    类图
  • 关键代码
    protocol AnalyticsService {
    func start()
    func sendEvent(event:Event)
    }

      class AnalyticsManager {
          static let instance = AnalyticsManager()
          private var services:~[AnalyticsService]()~
          private init() {
              services=~[UMAnalyticsService(),
                      GoogleAnalyticsService()
                      …]~
          }
          func start() {
              for s in services {
                  s.start()
              }
          }
    
          func sendEvent(name:String,data:~[String:AnyObject]~) {
              let e=Event(name:name, data:data)
              for s in services {
                  s.sendEvent(e)
              }
          }
      }
    
      class Event {
          let name:String
          let data:~[String:AnyObject]~
          init(name:String, data :~[String:AnyObject]~){
              self.name=name
              self.data=data
          }
      }
    
      class UMAnalyticsService: AnalyticsService {
          func start(){
              MobClick.startWithAppkey(“UMKEY”)
          }
          func sendEvent(event:Event){
              MobClick.event(event.name, attributes:event.data)
          }
      }
    

总结

设计目标有两个, 易用, 可扩展, 通过上述的设计, 基本达到.

  • 客户代码只用使用AnalyticsManager的两个方法(start, sendEvent)即可进行多家的统计.
  • 如果需要增加新的统计服务, 只需要增加一个类: 实现AnalyticsService的类, 修改一处代码: AnalyticsManager的初始化方法init里的代码即可. 符合面向对象, 需求发生变化, 尽量通过新增类, 而不是修改代码来实现这一原则.

相关文章

  • app统计模块设计-面向对象的方式

    app统计模块设计-面向对象的方式 需求 1. 多家统计 研发运营一个优秀的App, 要准确的统计APP的下载, ...

  • Android 各种开源项目记录比较

    App 的整体架构 App 结构,应具有清晰的层次划分、同一层模块间充分解耦、模块内部符合面向对象设计六大原则。A...

  • 九、面向对象

    一、什么是面向过程、面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式。  面向过程的程序设计方式...

  • Java基础-面向对象

    理解什么是面向过程、面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式。 面向过程的程序设计方式,...

  • JavaForAndroid-04

    一、面向对象面向对象是一种编程方式、是一种思维方式,不是一种编程语言。如何学习?语法、思维方式、设计原则、设计模式...

  • Python:飞机大战游戏1:前期准备

    一、目标 强化 面向对象 程序设计 体验使用 pygame 模块进行 游戏开发 二、pygame 模块介绍以及的安...

  • 基础面试题

    1.面向对象 面向对象和面向过程是解决问题的两种思维方式。面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计...

  • 2.CSS模块化

    CSS设计模式: OOCSS 面向对象CSS ,结构与设计分离,容器与内容分离 SMACSS 可扩展和模块...

  • 面向对象设计原则

    面向对象设计原则 面向对象设计原则是设计模式的基础,每个设计模式都符合一一种或多种面向对象的设计原则。 常用的面向...

  • 面向对象

    面向对象初学者 1.面向过程:解决问题 2.面向对象:模块化设计,例如汽车组装,优点,当我们某个零件坏了的时候可以...

网友评论

    本文标题:app统计模块设计-面向对象的方式

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