再看薄荷
Android版薄荷自13年6月份上线至今9个月时间左右,目前已经积累用户将近200w,从产品的角度来说应该算是一个不错的成绩,但是从技术以及设计的角度来分析,依然有很大的空间去提升。
设计
薄荷Android版自推出之初就是完全按照iOS版来做的,可以说算得上是像素级copy了,不可否认这是当初是最快速验证的有效手段,但时至今日,Android市场的地位是越来越重要了,在Android端积累的用户也是快速飞快的发展,这个时候再完全按照iOS平台的特性来设计一个Android的app就有些不妥了。我一直认为每个平台遵循各自平台的一些设计原则是比较重要的,毕竟每个平台的用户使用习惯还是有些差异的。
说说不遵循Android Design对技术实现上的影响,如顶部导航栏,Android有自己的导航–ActionBar, 有自己的样式,而且方便扩展,在此基础上能实现各种各样的样式,而由于我们是按照iOS的设计,就不得不自己定义一个NavBar,代码量增加了很多,而且随着需求与设计的不断变化,这种自定义的NavBar很难满足需求了。除此之外一些其他的类似iOS控件效果的实现都无形之间加大了实现难度。
Google在4.0之后便有了自己的一套Android设计准则推出,到今天可能已经很成熟了,而Android的碎片化问题也已基本解决,所以我认为在设计方面就应该遵循Android Design,在此基础上在UI,交互进行一些微创新将是很有必要的,相信这也是对Android用户的一种尊重。从Google自家的一些app如Google+, Youtube, Gmail等就可以看出Google对Android Design的大力推行,而且体验非常棒。国内像完全遵循Android Design的app已有很多,而且被各大市场推荐,如知乎,Fuubo等,甚至连一向高傲的微信都开始遵循Android Design了,我们应该是时候跟随时代的潮流了。
架构
现在版本的技术架构很长时间没有做出什么调整了,这个app从13年的5月份开始着手设计的,一方面当时水平能力毕竟有限,可能在某些方面设计的不太好,而另一方面技术更新的频率是很快的,这期间Google就更新了很多SDK的版本,以及一些新技术的推出,而我们的app需求和功能都在不断增加,中间真正让我们代码重构或者架构调整的时间很少,我们的app发展到现在功能和模块已经很庞大了,俨然是一个中大型的项目了,虽然中间有过一些的调整,但是相比于整个项目还是很小的,目前的项目架构可能说遇到了一个瓶颈,随着功能的不断增加以及需求的不断变更,我们的app稳定性以及性能都会有很大影响。
新的架构与设计
如果让我重新对整个app进行设计的话,我会这样设计:
-
设计上遵循Android Design,采用一些Android平台特有的组件, 如ActionBar, ActionBarPullToRefresh, DrawerLayout等。
-
主页面Tab的架构我会采用Activity + Fragment来代替原来的ActivityGroup, ActivityGroup是已经被Google废弃了,取而代之的便是Fragement, 使用Fragment将更容易扩展,而且更容易适配不同尺寸的屏幕。
-
View层会采用ButterKnife(一种View注入框架),会大大的减少一些繁琐臃肿的代码,提升效率。
-
数据处理层会采用一种ORM的机制,而我会选择ActiveAndroid框架,主要原因是用过Rails的ActiveRecord之后便对类似的框架情有独钟。
-
网络通讯层会采用Volley, Google I/O 2013推出的官方网络请求库,自己体验后觉得非常棒,请求快速便捷,使用起来也比较简单,扩展空间也很大,而且可以统一管理请求。
整个App的架构会是这样的:
以上便是现在比较流行的REST客户端的应用架构,由于整个App基本都是会和服务端进行数据交互的,依然会秉承着重服务端轻客户端的原则,客户端主要注重体验与交互,复杂的业务逻辑最好不要或者涉及的越少越好。
备注
一直都有个观点是:我们要做的是面向未来的App。所以会有两条个人建议。
1.目前4G都已经在大力发展,以后网络会更快速更方便,所以我建议目前本地都不需要提前放数据库,整个app的使用场景完全基于网络,当然这可能影响少数用户的使用,但是付出的代价比较大,因为要维护本地数据库的升级以及一些本地策略的逻辑算法。对一些数据的查询配合本地一些缓存的策略,相信用户体验不会减。
2.支持Android 4.0以上,目前4.0+已经占了大部分份额,而2.3可能依然会有10%左右的市场份额,但是这部分用户真正有用手机玩app的又有多少呢?可能大部分还是把手机当做功能机来使用的。
总结
以上便是重新对薄荷App进行了审视后的一番分析,如果整个app的架构想真的达到自己的理想状况将是一番浩大的工程,甚至可能比重新做一个App的工作量还大。
谢谢 , stormzhang
对APP的开发与设计存在同感。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端