距离上一个项目大体完成已经有一段时间了,一直说总结一下却一直拖着,最近已经开始php的学习了,觉得实在不能再拖了,需要对上一个阶段总结一下,然后好好的开始下一个阶段了。
项目架构
项目的架构参考的是简洁架构(我最早就是在这个文章看到的介绍,真正使用已经是15年9月低了),表现层使用的是MVP。
实践的结果还是十分满意的,项目的结构很清晰,各层各司其职,井井有条。并且我开始习惯写接口,使用抽象的逻辑先完成整个框架的搭建,具体的实现分成一个一个的任务,可以让实现具体功能的人不用理解整个复杂的业务流程,也能保证开发的顺利进行。大大保证了项目的质量和开发的效率。
当然中间也有崎岖探索,随着一步步的实践,自己的理解也慢慢加深。当初开始使用的时候和后期项目差不多完成的时候,我又看了很多项目和架构的文章代码。领域驱动设计、mvvm、变形的mvp、插件化开发、跨平台等等。
到此我才越来越觉得编程思想的相通,越来越多的看到的东西并不是android圈或者纯android开发者的讨论了,很多web开发者的文章讨论。在web中早已经使用的IOC、数据绑定、mvvm等等再android开发中也渐渐的开始讨论到越来越多、使用的越来越多。
而这些在我近期开始php学习的时候也愈发显现出来,让我可以更快的接收概念理解上手。
第三方轮子
因为是小公司,所以基础库都是一些主流的轮子。
- 图片库使用谷歌推荐的glide,facebook的fresco也很不错,但是我现在没有时间去研究它;
- 网络库使用retrofit+okhttp(缓存使用okhttp自带的缓存处理,可以参考我之前的文章);
- 响应式编程RxJava(给我带来了新的编程思考方式,Everything is a stream.)
- 依赖注入的dagger2,刚开始的时候真的是一头雾水,因为不太明白依赖注入是个什么东西,做web开发的同学应该对依赖注入司空见惯了吧。特别是我前一段时间封装sdk,抽离dagger,又开始大量new对象的时候,更是觉得dagger的舒服。
- 数据库greendao,你需要建一个java工程写一些配置约束的代码,然后就可以帮你生成dao和model,真是太方便了,没有反射效率也高。
- 事件总线使用的是androidEventBus,注意不是greenrobot的eventbus。
- 印象笔记的android-job用来处理后台事件,它会根据android版本的不同来调用obScheduler, GcmNetworkManager 或者 AlarmManager。
- 还有一些小库如:处理日志logger、键值对存储的Hawk、注解绑定事件和方法的butterKnife,都是很好用的。
- 室内定位服务组件:室内定位、室内地图、室内导航,有业务需求的欢迎联系我。
一些项目总结
- 架构不是来限制你的,是来帮助你的,所以千万不要本末倒置,要活学活用。(在初期基本是邯郸学步,有样学样,即便是感觉这样做很不爽了,也还在坚持这样做。不过后来终于想通了,按照自己的想法理解开始改造,最后结果是:随着业务的不断扩大复杂,终于明白为什么有些要那么做,哈哈,不过也有很多改的对的,总之就是要知行合一!)
- 父级P类不用写resume和pause方法,因为很多情况是不需要这两个方法的;
- 父级P写setView(设置view接口)和initData,这两个是所有P都要实现的,所以写到父级;为什么不合并这两个,因为对象的初始化在setView中,是一次就够了,但是initData不一定,比如可能要在onNewIntent中调用。
- 每个module配置自己的混淆文件,方便管理,在application的pro_guard_rules配置也可以,但是当module不用时appliction会产生冗余配置还要处理。
- 每个module配置自己的依赖,为了高内聚,并且打包的时候并不会重复打包不同module之间的相同引用。
- 所有的跳转都要走navigator,(navigator是统一处理页面跳转的类)
一些好用的东西
- 使用AndroidStudio进行开发,有很多朋友的公司还在使用eclipse开发,听着就替他揪心。
AndroidStudio插件
- .ignore ,当然同系的软件都可以用,想PhpStorm、IntelliJ、WebStorm等。
- Android ButterKnife Zelezny (AndroidStudio插件)这个是配合 ButterKnife使用的,让你从findviewbyid中解脱,当然如果你使用databinding的话,也不用findviewbyid了。。
- GsonFormat 让你从写json相关的实体类中解脱
- WakaTime 这是他的网站,统计你各种编程的时间。
AndroidStudio使用
- 配置使用代码模板,团队模板要统一。
- commed+f12 查看结构
- F3 代码加书签,commed+F3
- alt+commed+t 配置代码包裹
- commed+alt+B 查看方法的实现
- commed+U 查看方法的抽象方法(接口写多了,这一对还是很常用的)
chrome插件
- Postman 一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。
- ChromeADB
- OneTab 可以帮你把打开的很多网页收起来存着,很方便。在windows上用chrome打开太多页面会很占资源变卡,但是在mac上感觉还好。(顺便推荐mac pro做开发,真的好用)
- Octotree 浏览github代码的时候,左侧可以树桩浏览目录结构,十分方便。
- JSONView 格式化json数据
- 有道词典 英语不好的,经常查单词太慢,用这个还是很好用的。
- Vysor 同步android手机画面,并且可以控制,记得大学答辩的时候用的一个延迟好大,这个延迟很低。
其他
- versioneye 项目中引用了很多第三方库,他可以提醒你哪些库可以升级了,我的项目所有依赖都配置在dependencies.gradle中,我把这个文件上传上去就识别了,但是库好像不全。。其他项目像php的也都可以使用。
- mac软件推荐到 www.ifunmac.com,虽然是要收费的,但是不贵还是很值的,省去了找软件的时间,并且更新很快。
- No Sleep 让你的mac不sleep
- 如果你在找一个地方写博客的话,我推荐简书。
- 笔记是积累,博客是沉淀,我一直在用为知笔记,mac版的不如windows的好用,你也可以尝试印象笔记等。我也试过mdwiki和tiddlywiki.com,但是感觉不如为知笔记好用,主要效率就差很多。位置笔记各个平台上也都有客户端让你的体验更好。
- fabricTwitter的移动应用开发平台。我在androidStudio装插件一直登陆不上。。