从零开始开发一款Android app,前期需要哪些规划工作避免代码臃肿混乱?

相当于一个超轻量级的框架的实现
关注者
1,156
被浏览
62,303

17 个回答

避免代码臃肿混乱,最根本的是需要代码功底以及对于程序的整体把控和设计能力。除此之外,对于Android App,个人抛砖引玉,提点自己的思路。如果只是轻量级的App或者Web App,在App内做点简单的层次划分就可以,App实际上只是做在服务器和UI之间的透传。但目前我手上项目App最终的代码量应该在10W行以上,本地需要进行复杂操作,那就需要在架构上进行一些思考。

1.整体架构

代码和文档规范,根据需求进行模块划分,确定交互方式,形成接口文档,这些较为通用的内容不再细说。做Android App时,我一般将App进行纵向和横向的划分。纵向的App由UI层,逻辑层和模型层构成,整体结构基于MVP思想(图片来自网络)。

UI层内部多用模板方法,以Activity为例一般有BaseActivity,提供包括一些基础样式,Dialog,ActionBar在内的内容,展现的Activity都会继承BaseActivity并实现预留的接口,Activity之间的继承不超过3次;为避免Activity内代码过多,将App的整体控制权后移,也借鉴了IOC做法,大量的逻辑操作放在逻辑层中,逻辑层和UI层通过接口或者Broadcast等实现通信,只传递结果。一般Activity里的代码量都很大,通过这两种方式一般我写的单个Activity内代码量不超过400行。

逻辑层实现的是绝大部分的逻辑操作,由UI层启动,在内部通过接口调用模型层的方法,在逻辑层内大量使用了代理。打个比方,UI层告诉逻辑层我需要做的事,逻辑层去找相应的人(模型层)去做,最后只告诉UI这件事做的结果。

模型层没什么好说的,这部分一般由大量的Package组成,代码量是三层中最大的,需要在内部进行分层。

横向的分割依据AOP面向切面的思想,主要是提取出共用方法作为一个单独的Util,这些Util会在App整体中穿插使用。现在我的App都会引入我自己封装的Jar包,封装了包括文件、JSON、SharedPreference等在内的常用操作,自己写的用起来顺手,也大幅度降低了重复作业。

这样纵,横两次对于App代码的分割已经能使得程序不会过多堆积在一个Java文件里,但靠一次开发过程就写出高质量的代码是很困难的,趁着项目的间歇期,对代码进行重构很有必要。

2.类库的使用

现在有很多帮助快速开发的类库,活用这些类库也是避免代码臃肿和混乱的好方法,下面给题主推荐几个常用类库。

减少Activity代码量的依赖注入框架ButterKnife:

github.com/JakeWharton/

简化对于SQlite操作的对象关系映射框架OrmLite:

github.com/j256/ormlite

图片缓存类库Android-Universal-Image-Loader:

github.com/nostra13/And

等等还有很多。但我对第三方类库的使用并不是非常多,对于这方面

@stormzhang

应该了解的比我多。我的态度是用能官方的还是用官方的,不行再用第三方,选择偏向于慎重,因为万一出问题呢?

个人博客:

blog.csdn.net/luyi325xy

欢迎与我交流。

占位,个人经验,不足之处请多指正。

大体上说有以下几大方面。

1.需求分析

主要功能一定要开工前确定啊。否则让开发人员闹心的不止是加班改代码啊。有代码洁癖的更是伤不起啊!

举个栗子。

设计之初,根据业务逻辑设计了一款原型,实现了当前全部需求。主页面功能用的是android规范的左滑侧边栏,嵌套切换fregment的方式,辅助功能直接弹出activity。并且通过领导审核了。当做完之后领导说添加个功能吧,入口就在菜单中。

(´⊙ω⊙`)

[图片]

尼玛早说啊!(╯‵□′)╯︵┻━┻

抽屉菜单已经占满了啊!

五寸屏幕高清分辨率都快到底了,小屏幕会看不见的啊!

领导你歧视小屏幕手机吗!

所以展开隐藏技能查克拉全满对着领导开喷。

讲体验,讲标准,讲规范。

说适配,说美观,說构图。

谈工时,谈加班,谈星座。。。

最终功能该合并的合并,该去二级菜单的去二级菜单。保持了原菜单不变。

ヽ(✿゚▽゚)ノ

2.架构设计

这里还是个需求密切相关的。不同需求对应不同架构设计。

假如是要做一个某系统的手机端,那么就不需要太多的业务逻辑。只需要做好调用不同的webservice进行增删改查数据罢了。官方控件完全可以满足需求。最多重写一下控件,自定义view,网上教程很多,不是十分困难。

甚至以前读到过有工具能把网页应用直接封装成app轻应用的方法。具体方法忘记了。只记得前阵子很火的2048就是这样的轻应用。

至于有复杂业务逻辑的应用,比如公交地铁换乘,有本地数据库,用到算法的应用,就如@M.A.G.I所说,需要用到设计模式和模式选择。

细节上来说就是分包,目的上是解偶。

fragement,adapter,activity,listener,tool/util,common等等都分开放。

3.命名规则

命名规则有很多高大上的名词,比如大驼峰,小驼峰,匈牙利命名法。

其实最简单的就是按照谷歌命名学习。比如MainActivity,LoginActivity

比如activity_main.xml

比如ic_launcher

等等。个人觉得谷歌做的很贴心了已经。

代码中的变量名啦,方法名啦,按照java命名规范来就很好了。

4.第三方库

个人不建议用。一来是安全稳定性没有保障,另一方面不利于个人学习,容易产生懒惰思想。个人比较喜欢找开源程序代码,看大神的思路,自己实现。这样能有效的提高自己,并去除其他不需要的功能,还能按照自己的风格组织代码。

当然像二维码扫描核心库这种非个人短期能达成的,还是必须拿来就用的zxing(≧∇≦)