一种新的架构设计思路,用户行为驱动开发
旺道朋友圈广告 -> 最新发布
一种新的架构设计思路,用户行为驱动开发

前提

用户行为驱动开发是什么?

它是一种适用前端的面向用户行为的开发思想,是一个用户行为的产生到执行,驱动数据的产生,再由数据流驱动渲染的流程。我认为,前端要完成的工作就是接收用户行为,解析用户行为,到给用户一个反馈。在各种用户行为形成一个序列后,在之后的开发中可以得到很多方便。

用户行为驱动开发是如何诞生的?

由于每个 App 都需要采集数据进行分析,需要进行数据埋点,这些数据往往都是一个用户行为加上一些业务数据,如果使用代码埋点的方式,就会导致 UI 代码中总要掺杂着一些额外的埋点逻辑,比如一个 button 的 onClick 中有一段获取业务数据并发送埋点事件的代码,久而久之,代码就会变得臃肿不堪。现在虽然有无痕埋点的方案,但是成本过高,小公司去开发不是很现实。

出了上面的问题后,我意识到用户行为是一个关键点,其实每一个需要采集的数据都由一个或几个用户行为拼凑出来的,比如用户点击了登录按钮,其实就是由两个 Action 组成,ButtonClick 和 LoginAction。再比如,用户上拉加载更多数据,其实就是产生了 PullUpToLoadMore 和 GetXXXDataAction 。

带着这样的思考,我就开始尝试了面向用户行为开发。

其他说明

  • 我是 Android 开发,之后的一些例子可能更适用于移动端,但思路上适合各种前端的
  • 观察者(订阅\发布)模式,解耦利器,用户行为驱动开发使用了大量的观察者模式,让每一个部分职责单一明确
  • 本文不讲代码的具体实现,只讲思想,之后可能会写其他的文章具体讲实现

正文

一、UserAction 的类型

一种新的架构设计思路,用户行为驱动开发

如图,展示的是移动端的一些基本操作,左边四个是针对列表页面的操作,分别为「下拉刷新」「上拉加载更多」「Item 曝光」「Item 点击」。剩下四个为「PageView -> 浏览页面」「UseDomainService -> 使用业务服务」「 ButtonClick -> 按钮点击」「ComponentShowUp -> 组件展示」。

这里具体解释一下「使用业务服务」和「组件展示」

  • 「使用业务服务」可以看做是用户在使用公司的业务,比如每个公司都会有登录注册,再比如公司中特殊的业务,如看视频或者获取一组新闻数据等
  • 「组件展示」是指一个控件或组件弹出,比如 Android 中的 Dialog\Toast\PopupWindow 以及自定义的Window 等

二、UserAction 驱动渲染的过程

首先说说,在一个简单的列表页中,UserAction 是怎样工作的

一种新的架构设计思路,用户行为驱动开发

首先不考虑数据是怎么获得的,只想 UserAction 如何应用在 UI 代码中,就是图中的 5 个步骤。 UI 只负责生产对应的 UserAction,然后观察它,它在执行后会产生对应的结果,UI 只需要使用结果去渲染。

所以 UI 的职责很明确:

  • 产生 UserAction
  • 执行 UserAction
  • 接收数据,进行渲染

UI 中的代码大概就像这样:

//页面开始显示一个列表
start() {
 observer = List result -> { 
 render(result);
 }
 new GetXXXListAction().execute(observer);
}
//登录
loginBtn.setOnClickListener(v -> {
 ButtonClickAction btnClickAction = new ButtonClickAction();
 btnClickAction.enqueue();
 LoginAction loginAction = new LoginAction();
 loginAction.execute(observer, params);// observer 用于观察登录状态变化,参数为用户名密码
})

三、UseDomainAction 的执行过程

一种新的架构设计思路,用户行为驱动开发

用户选择使用我们的 app,就是在使用我们提供的业务服务,所以业务逻辑处理是我们平时开发精力投放最多的一部分,我具体说一下「UseDomainService」是如何工作的。基于模块化开发,我们每个业务应该对一个模块,所以 action 执行时就是调用我们的业务模块的接口,这里针对业务模块的异步请求会再次使用观察者模式或是个 CallBack ,action 观察业务模块,然后接收模块返回的结果,再将结果发给执行 action 的页面。

下面是针对数据流向的一个图,可概括为UI -> Action -> Data -> ViewModel -> Render,UI 产生用户行为,用户行为驱动数据产生,数据驱动 UI 渲染

一种新的架构设计思路,用户行为驱动开发

四、其他 UserAction 的使用方式

  • 「PageView」:可在 LifecycleManager 的 onActivityResumed 方法中进行创建,然后取到每个Activity 的路由 url 或是类名,存放到 PageViewAction 中。如果你有一个 BaseActivity,也可写在BaseActivity 的 onResume 方法中
  • 「PullDownToRefresh/PullUpToLoadMore」: 可在列表刷新控件的 callback 中,创建这个Action,例如继承 SmartRefreshLayout 然后重写 refresh 和 loadMore 方法,在里面加上对应的Action
  • 「ButtonClick」:和上面类似,继承 Button,在 onClick 中,添加 ButtonClickAction
  • 「ComponentShowUp」:也是继承基础控件,然后再 show 的时候添加这个 Action
  • 「ItemImpression」:这个比较特殊,是列表中每个 item 曝光的行为,我的做法是在 RecyclerView的OnChildAttachStateChangeListener 中的 onChildAttached方法中记录,并且要绑定一些业务数据

这些 Action 在生成或执行时需要存放到一个列表里,形成一个序列,下一节会具体介绍。

五、UserActionSequence 用户行为序列

以下展示的是从开屏页,跳转到登录页,然后点了登录按钮的一个 UserActionSequence

一种新的架构设计思路,用户行为驱动开发

假如数据需要我们在登录按钮处埋点,我们只需要从序列中找到对应的 Action 组成事件发到后端即可。当然后端最好也抽象出一些通用事件配合前端,那样用户序列的威力就会发挥到极致,基本可以在 UI 代码中做到无痕。下一节会简单说一下用户序列如何配合埋点系统做到基本无痕的埋点方式。

六、浅谈埋点

一种新的架构设计思路,用户行为驱动开发

按职能解释「EventTracker」的每一部分:

  • 「ProcessedActionBuffer」: 需要观察 UserAction 入队,当有新 Action 入队时,就将其存到ProcessedActionBuffer 中,并做一些特殊处理,比如「PageView」 我们是在 onResume 时生成的,但有时弹Dialog 再回来的时候又会触发一次「PageView」(Android Activity生命周期决定的,其他平台可能不会有这种问题),所以需要去重,保证发送没有冗余的数据给后端
  • 「EventActionMapper」: 用于映射 Action 和 Event,其实就是一套行为和事件的转换规则(需要前后端配合)
  • 「EventBuffer」: 存储转换过的Event,有一套自己的策略进行缓存(例如大于100条存入本地数据库),还有一套策略用于发送(1分钟轮训一次 EventBuffer进行发送)

图中还画了 Logger 和 Other 两个模块,Logger 可以根据行为序列记录一些日志,用于分析 Crash 和一些业务的异常,Other 大家就可以根据自己的脑洞和需要进行设计了,比如 UserActionSequence 是把 UserAction 序列化为 json 的过程,我们也可以把 json 反序列化成对象,然后再交给对应的 UI 去执行,这样就可以完成 UI 自动化测试。

总结

原来常使用的 MVP 或者最近比较火的 Android Architecture Component 使用的 MVVM,都不能很好的用代码来表示用户行为(代码可读性不够直观),虽然 Presenter 和 VM 的职能也是用来解释用户行为获取数据再到驱动渲染,但我觉得对于程序员来说还是不够友好。但使用 UserAction 来贯穿整个前端的流程,一切看起来就变得自然了,UI、模块、数据的职责也都显得更单一了。

重要的是这样开发是我们获得了用户的操作序列,一切的数据源于用户。有了它对以后的分析和其他的开发都会有很大帮助。

教育培训机构-如何策划节日招生?
做教育培训,最重要的事情莫过于招生了。面对不同的学员,招生方…于招生。目标不同,活动策划也会不一样。② 活动主题要鲜明不仅主题要鲜明,主题之间要有连续性。就像看连续剧一样,一集接一集,一环扣一环。策划好一系列活动,一个接一个来,从多个角度延续活动的宣传,突出主题,引起关注度。常用的招生方式有:体验课招…-------------想要获得更多运营技巧、doc文案,
教育培训:如何提高满班率和续班率
什么是满班率?就是实际人数除以计划招生人数,这个值就是满班率…员有流失是正常的,但要保证一个概率。在保障老学员续期的基础上,我们也要大胆创新,开设网络课程,拓宽招生区域。实地课程录制后,进一步发行到商弈云课上,通过商弈云课系统转成真实流量,网上有人点击观看,点赞,可以按点播量分佣金。助你在日常的营销推…-----------------------想要获得更多运
培训机构难盈利的问题出在哪里,如何实现盈利?
竞争白热化实地培训班、托管辅导班竞争白热化了,利润越来越稀薄…现没有多少盈利。还有一部分负责人在刚招生时,掌握了不少资金,开始盲目扩张,盲目做课程推广,以期待获得更多生源和收费,从而使培训班陷入了这种恶性循环的陷阱里。其实这些到手的钱,并不是你的利润,而是你未来要支出的钱。如遇到行业快速发展时期,或者…-----想要获得更多运营技巧、doc文件,请“关注”并“转
“差异化”经营是网络培训赚钱的关键所在
“差异化经营”这个词,相信大多数人都耳熟能详,但要做到的却是…。在现有的基础上更新升级或者资源整合就是对现有的产品或者技术,进行升级版本,或者通过一些资源整合,成一个项目。你的技能以前是用来生产或制造产品,现在是把技能升级成知识培训,转换云课堂。直白一点就是可以让老师自行录好课程并上传到学校的商弈云课…在着缺点和不足之处。在创新改革时,要从功能、服务、价格等方面
教育培训行业是如何运作的?
以前读书时,学校附近有个小摊卖鸡蛋灌饼。刚开始的时候只有一家….%,剩下的一对一和多人大班其实市场份额都很小。家长报培训班,是希望孩子能够学到知识。老师通过课上教学和课后辅导来满足孩子的需求,达到成绩提高的目标。我见过上百人的大培训班,为什么一个班这么多人?因为是名师讲课,但人太多坐后面,基本听不到重…是你的核心竞争力。想要得到用户的认同,你就必须做到产品质量好
旺道:实体店怎么做网络营销?
年纪大了,体力不好了,便赚不了什么钱了。所以,一定要在年轻的…写文案都是非常头痛的事情,那么下面我会给大家提供一个解决方案。在互联网营销系统里面有很多细节营销,软文营销就是其中一种,但好多小白头痛写文章,所以可以用这个方法也一样可以植入广告语,或者是图片广告,轮显切换广告,使用 旺道营销系统,也就是每…以帮你吸引海量精准粉丝。有了粉丝,你通过广告、产品、服务就可
旺道:圈里圈外,铁饭碗距离瓷饭碗究竟有多远?
中国人爱混圈子,从线下一直混到线上,各种奇形怪状的圈子勾勒出…不能推则敷衍了事,盼着混到主任科员退休;一种是老黄牛式,踏踏实实、兢兢业业工作,但拙于人际关系,活干得最多,但依旧不见晋升迹象;还有一种是提线木偶式,你扯一下线他动一下,好像脑子和身体是分离的。我突然一拍脑袋,这是提前衰老的迹象啊,工作内容…即使选择留在铁饭碗圈里,也应保有随时离开的思想警惕和进行必要
旺道:微信要双开了,朋友圈推广更好做了
现在手机只能登一个微信,如两个,三个微信的小伙伴们就只能退出…动推广工具、 设置头像点击头像图标,点“+”选择图片,可以上传你的企业,个人头像,产品服务等。旺道微信朋友圈广告免费朋友圈广告-旺道、 设置推广主题点“广告”,再点“+”设置推广的主题(类别),填好中文主题,以及你的网址。教你不花一分钱做朋…简直就是一劳永逸哟。如果你点开发布的文章看不到广告,那就是你
旺道:如何能让网站多个关键词排名百度首页?
最近接了一个单,做婴儿游泳馆加盟的。优化推广范围是全国,但是…泳馆加盟哪家好”、“婴儿游泳加盟多少钱”这类与我息息相关的词。如何能让网站多个关键词排名百度首页?但客户并不认同,客户说这个词指数低,或者说搜的人不多。是,这是一方面原因。但是,指数低有什么关系,你是卖产品还是卖指数。搜的人不多有什么关系,…实现广告效果最大化,来满足大众化的广告需求。对于这样的四两拔
旺道:如何成为网络营销达人?这个技能帮你节省80%的时间
在某次名师讲坛上,听到了一个让人警醒的故事。说有个村子缺水,…准的产品。现在已经不是新鲜事物,好多企业因为百度竞价的高额费用,头疼不已,所以做网站关键词优化排名,成为了企业必选的推广项目。做优化也要做到有成效,不然就是一分钱也是昂贵的。用 旺道智能机器人 就可以持续代替人工去做,它非常聪明,只要你够耐…手,设备先进,你多努力奔跑也于事无补。简单说,要去一个地方,

此文章来源来互联网,如果你有任何版权冲突,可以联络我们,微信号:WANCOME,QQ:1444641。加我们时,请说明来意,我们将优先处理你的问题。




商弈云推  | 一键推  | 随手推  | 圈推广  | 跨圈推
粤ICP备10213132号
旺道商标注册证号:8608864
Copyright © 2016 环企网络信息科技有限公司 版权所有