又到了8月8日这一天了。
从2016年到2018年,时间不知不觉的过去了两年。对于上一年这个时候定下的目标:
- Kotlin(就等AS3.0),AOP切面编程能熟练运用,编写出高质量的代码,尽量写多的单元测试。
- 争取向全栈发展
这里总结一下:满意。
对于第一点:虽然说对于AOP切面编程还处于了解阶段但是对于Asm、Javassist、动态代理等都有了相应的了解对于Apt技术也很感兴趣,在下半年打算深耕这方面的技术。
然后呢单元测试也写得不多,感觉比较难在公司项目中落地,在个人的开源项目里倒是比较容易实践些。对于单元测试,个人认为理解比编写更适合团队。比如我虽然写单元测试写的不多,但是当我编写ViewModel的时候都是在思考
这么写方便做单元测试吗?怎么以后做单元测试方便些? ViewModel里不要有任何Android相关的代码,最好都是纯kotlin代码 。。
当我带着这样的思考去写代码的时候,发现已经很少出现bug。这应该算是能编写出高质量的代码了吧。
至于全栈:应该是没达到吧。现在的技术栈还是偏向于大前端。学习了前端的Vue、小程序语法、还学习了一段时间的node.js和Python,ios也学习了一会儿。但都算不上熟练,缺少实际的项目进行实践。绕来绕去还是Android上的进步最大。
最大的收获:无疑是基于响应式编程的思想,能够熟练运用kotlin语言和MVVM架构来编写Android应用。
并且将之落地到Android团队里,减轻了大家的开发成本和提升了团队的开发效率。以前平均要8、9点才能下班,而现在5、6点就走了。
最终结合自己这段时间的经验,写出了《使用Kotlin构建MVVM应用程序》一系列的文章,对于架构也有更深的理解。
前些时候在极客时间里购买了《Java核心技术36讲》,加深了我对于java语言的理解,原来从java文件到运行这个过程之间要做这么多的工作,而其中我们还可以做很多其它的事情,比如通过apt技术帮我们在编译器生成代码,通过AspectJ帮助我们进行面向切面的编程,通过Javassist操纵字节码帮助我们完成热修复等等。以前对这些知识看的云里雾里,现在应该是很有兴趣去了解这一套东西。
Kotlin
Kotlin在17年5月份正式成为了Android开发的首选语言。17年8月份开始,我开始系统的去学习kotlin并且尝试着去做一个实际的项目出来。当你认真去学的时候,从java转向到kotlin所花的时间成本真的太少了,可能都不需要一星期的时间。到现在google越来越多的Android项目都使用的是kotlin语言了,而我也在一些博客的文章下看到越来越多这样的评论:
项目很不错,唯一缺点就是kotlin写的
都8102年了,兄dei!
MVVM
上一年的时候,我提到了MVPVM架构,那时候我在不断的改进我们当时的项目架构。
从最开始的基于DataBinding技术的MVC过渡到17年年中的MVPVM架构,应该说是基于DataBinding技术的MVP,到现在应该算是掺杂了MVC思想的MVVM。
对于这一系列的演进,我的理解是能让不同层次的开发人员写出风格相近的代码。
但有两个需要遵守的原则:
最重要的一个原则就是尽量在app中做到separation of concerns(关注点分离)。常见的错误就是把所有代码都写在Activity或者Fragment中。任何跟UI和系统交互无关的事情都不应该放在这些类当中。尽可能让它们保持简单轻量可以避免很多生命周期方面的问题。别忘了能并不拥有这些类,它们只是连接app和操作系统的桥梁。根据用户的操作和其它因素,比如低内存,Android OS可能在任何时候销毁它们。为了提供可靠的用户体验,最好把对它们的依赖最小化。
第二个很重要的准则是用model驱动UI,最好是持久化的model。之所以要持久化是基于两个原因:如果OS销毁app释放资源,用户数据不会丢失;当网络很差或者断网的时候app可以继续工作。Model是负责app数据处理的组件。它们不依赖于View或者app 组件(Activity,Fragment等),因此它们不会受那些组件的生命周期的影响。保持UI代码的简单,于业务逻辑分离可以让它更易管理。
这些话来自于google的App开发架构指南 ,算是一个架构入门手册,如果你想提升自己的架构能力,那么从它开始再适合不过。
基于这两个原则,最终写出了【PaoNet】泡网第三方客户端,总结这些经验之后,产出了《使用Kotlin构建MVVM应用程序》这一系列专栏,希望更多的Android开发者能应用这一套思想,也算是开枝散叶了。
响应式编程
什么是响应式编程呢?很多开发者把它和函数式编程混淆了。
- 函数式编程:(英语:functional programming)或称函数程序设计,又称泛函编程,是一种编程典范,它将电脑运算视为数学上的[函数]计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。
- 响应式编程或反应式编程:(英语:Reactive programming)是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
函数式编程说的是一些语言比如lisp、scheme、Haskell、Clean、Erlang等等,面向设计代码语言。
而响应式编程是一种通过异步和数据流来构建事物关系的编程模型,是一种编写代码的思想。
我们可以这样说:
我们使用函数式编程语言kotlin 运用基于响应式编程思想(RX)的java扩展(Rxjava)来编写Android应用。
我对于响应式的理解是这样的:
data : 嘿
UI : 哈
下一年
我要达到自己期望的水平
- 深耕Android和Java,熟悉AOP三剑客,打造自己的框架
- 深入学习material design,出品一个精美的app,以plaid为目标
- 使用Kotlin做后端,为Kotlin全平台化尽一份力
终极目标
独立开发者