关于移动端软件开发的一些浅见

265 查看

最近网友们盛情难却,只好胡乱拼凑一篇,写的不好不要打我。
笔者想了想,各种针对特定技术细节的博客已经汗牛充栋,不如写写宏观上和原则上的东西。
移动端软件开发涉及的技术,在笔者看来分为这么几大类。

  • 一是常规客户端技术,包括常规的UI,网络通信,数据持久化,推送,用户行为统计版本更新等等,这些都有现成的解决方案,系统原生的或是第三方的框架,有的也需要开发者根据实际需要再封装一层。移动端开发者们常挂在嘴边的技术一般都属于这一类。

  • 二是领域模型的构建,所谓领域,指的是你开发的软件所针对的那个领域。你开发的app之所以有人用,是因为它解决了某个领域的问题,而解决这些问题会涉及一些对象和流程等等,开发者要对这些东西进行建模。举例来说,如果你开发的是即时社交app,那你要对好友,聊天室,消息等等进行建模;如果你开发的是电商类app,你需要对买家,卖家,交易流程等等进行建模。建立领域模型是可以独立于上述第一类技术的,构建过程中需要依托第一类技术的地方可以定义接口。值得一提的是,这里说的领域模型是跨客户端和服务端的,而现在似乎流行把很多东西都推给服务端去做,客户端做的很轻,所以客户端可能没有完整的领域模型,有的可能是一些碎片化的业务逻辑。不过也是因项目而异。领域模型的构建需要开发者对领域有所了解,并且能够对其进行分析抽象。

  • 第三类可以称为特种技术,包括wifi,蓝牙,传感器,OpenGLES等等。这类技术不像前两种一样是几乎所有app都会用到的。

  • 第四类是数学模型。绘制图表,处理无线信号和传感器等的数据,游戏世界的构建等等,都需要数学模型的支撑,比如矢量和矩阵运算,滤波算法等等。

  • 第五类是辅助技术,包括构建系统,测试工具和框架等等,比如Android的gradle,adb,测试框架,iOS的CocoaPods,测试框架,Instruments等等。

移动端开发中涉及的技术,大体上都会落到上述五类中的某一类,除非你使用了某一个接管整个项目的框架比如各种游戏框架。对一款移动端软件的构思也可以从这五个方面展开。
从平台依赖性来讲,一三五较强(OpenGLES除外),二和四较弱,而其中又尤其以四为最弱。以Android和iOS两个平台而言,数学模型完全可以统一用C/C++编写,iOS平台可以轻松兼容,Android平台需要用JNI封装。

下面聊聊一些软件开发原则上的东西。
有句被笔者奉为圭臬的话是

All problems in computer science can be solved by another level of indirection

会用五花八门的技术,却写不好一款软件,可能就是因为没有这个觉悟。
会用铅笔,钢笔,毛笔,蜡笔,不等于会画画,同样的,会写ObjC,会写swift,会调用iOS系统API,不等于就掌握了软件开发。你以为是iOS开发很难学,实际上很可能并非如此。很多程序员遇到的问题都不是具体平台的问题,而是如何开发一款软件的问题,是软件工程思想上的问题。
软件开发中一个典型的错误倾向是试图一步到位解决问题,比如iOS开发中试图把一整个业务流程都塞进ViewController里,甚至都塞进某一个按钮点击触发的方法里。
正规的软件工程思维方式是,我要解决这样一个大问题,可以把它拆分成哪几个小问题,而暂时不去关心这几个小问题要如何解决,现阶段实现不了的东西就定义接口。