又一年

又到了8月8日这一天了。

从2016年到2018年,时间不知不觉的过去了两年。对于上一年这个时候定下的目标:

  1. Kotlin(就等AS3.0),AOP切面编程能熟练运用,编写出高质量的代码,尽量写多的单元测试。
  2. 争取向全栈发展

这里总结一下:满意。

对于第一点:虽然说对于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 : 哈

下一年

我要达到自己期望的水平

  1. 深耕Android和Java,熟悉AOP三剑客,打造自己的框架
  2. 深入学习material design,出品一个精美的app,以plaid为目标
  3. 使用Kotlin做后端,为Kotlin全平台化尽一份力

终极目标

独立开发者

你可能感兴趣的:(又一年)