Kairbon'Blog.

如何开发一个APP

字数统计: 2.1k阅读时长: 7 min
2019/07/10

如何自己从零开发一个app呢?估计很多喜欢编程的人都考虑过,今天,我想把我的经验分享给大家,如何开发出一款app。里面一些专有名词我会标出。

一,app的分类

要开发一款app,首先要确定你要做的功能是什么,要在什么平台上运行等,这里就不再赘述,然后就是确定app的分类,因为这就涉及到问题的核心,我该学些什么,怎么去入门。其实,在传统软件工程,一般会把软件分成分布式单机两种类型,下面详细说一下这两种。

1.单机软件

这类软件通常运行在自己的设备上,无需与软件开发商进行数据交换,或者交换的次数很少,比如单机游戏,比如自己做的小工具等,这类软件你需要对你所期望运行的设备,操作系统和开发这个这个设备上面的软件所用的语言有深入的了解,比如安卓手机,如果你想做一个围绕nfc开发的门禁卡模拟软件,首先你就得保证你手机上得有nfc功能,还得了解开发安卓app所用的语言,还得了解Android里面和硬件打交道的一些api,但目前市面上的app大部分不是这种类型的,这里就不细讲。

2.分布式软件(C/S架构)

这类软件通常有两个端,一个叫做客户端client,一个叫做服务端server,客户端很明显就包括了前面的单机软件所需要的所有东西,而且有一个很显著的特点就是如果你想要使用上面的一些功能,他都会要求你去联网。因为一联网,数据就与我们的服务器(服务端)得到了交换,软件开发商就可以根据得到的数据继续给你服务,比如QQ,腾讯云里面的服务器得到了你发给某个人的数据,然后再发给你想发给的人,这样一来,你的聊天记录也上传到了腾讯的服务器上,你也可以在你换了一个设备的时候浏览到你上次的聊天记录,看到这里可能就会想,我们如果要开发一个app 的话怎么去控制它把数据上传到服务器呢?        
   首先,你就得了解什么是服务器,也就是服务端运行的设备,简而言之,你可以把它理解为一台电脑,但它的内存和cpu要远远比pc强得多,不过他没有显示器,也没有声卡,它上面运行的一般也不是我们通常意义上讲的windows操作系统(当然也有可能),主流是运行linux操作系统,而linux操作系统又有好多种发行版本,目前大多数是采用centos,是一种没有桌面界面的操作系统,所以说如果想要入门分布式软件开发,掌握好linux是必须的。

二,数据的传输

上面提到如果你想要开发一个分布式app,你就得掌握和服务器打交道的方法,这里就有涉及到一个新的知识点:计算机网络 这是大学和计算机相关的专业必学的一门专业课,在计算机网络这门课中,他会讲OSI七层模型,不过一直是从下往上讲的,这对于初学者不是很友好,我的建议是,在你学习一门语言的时候,试试它网络编程的模块,比如java里面的socket,就是最顶层的东西,然后一层一层往下看,这样你就能大概理解计算机网络的运作,但如果只是看书你还是不会操作,因为网络这里最核心的点还没说到,那就是协议
整个网络就是建立在协议的基础上的,举个例子,在计算机间传输数据的电缆设计好了,但人们对网线插头的形状议论不休,有的人要方的,有的人要圆的,这就对计算机的设计和网线制造商提出了很大的挑战,权衡利弊,人们决定,那要不就用一样的吧,于是决定用了现在这种样式,当然这个故事是胡诌的,但里面突出了协议的重要性,如果没有一个协议作为支持,我们互相发的东西如何被机器,被写死的程序自动的识别,所以,就有了http协议等协议 ,但还是有麻烦,因为如果每做一个软件都写一个http协议的实现类,那多麻烦啊,于是聪明的人们把它封装成了一个个包,开源给了大家,而且实现方法各有不同,比如就有Java的httpclient.

三,server端

或许看到这里,聪明的同学已经看出来了,是啊,我们不止得搞定client的开发,我们还得搞定server的开发,因为server不可能由真人去响应 ,也来不及的啊,这时候,恭喜你已经入门了,因为已经有人为我们想到了这一点,在之前socket阶段,我们可能尝试过编写一个小型的模型,一个server绑定一个端口,一个client向一个server的ip和相应的端口发数据,server只要绑定了相应的端口,它就可以接收到client message并进行处理,当然聪明的程序员们是不可能让这种基础的工作被重复从底层实现一遍又一遍的,他们把server socket和http协议等再度进行了封装,并且做了许多自动化的工具,然后把它开源出来,这样在server开发的时候,就只需要关注具体的业务逻辑的实现,而对于从底层开始就可以不必了。这种工具被称之为web容器,比较有名的由tomcat,iis,nginx等等。
 但是解决了这个问题之后,我们发现我们又遇到了问题,那就是我们如何去统一的把客户端上传的数据管理起来呢?因为在实际工作中,无数的数据接踵而至,如果没有合适的解决数据存储的方法,那么无论是自己以后查询还是为用户提供服务都是很不好的,比如,假设你写的软件会把从client读入的数据传入到到一个个文件里,按照时间命名。用的时候再读取出来,这在业务量小的时候没毛病,但一旦稍微业务量大一点,自己存进去的东西占地方不说,而且除了你估计应该就没人知道这些东西在哪了吧。

四,数据库

如果说应用软件的外壳是前端和后端的话,数据库就是核心,数据库的作用太重要了,它为任何操作平台提供了统一的调用方法,而且支持各种各样的调用方法,比如排序显示,搜索等除此之外还有各种复杂的数据关系,比如主键外键等等,有了数据库,你就不用担心数据的存放了(当然前提是你要学好数据库的设计)。

五,前端

其实最不需要讲的东西就是前端了,因为对于入门来说,前端是最快的,因为它所有的东西反馈都是即时的,比如你设置了一个可以拖动的圆形按钮,这样在不停的测试和实验中,你的水平会进步很快,但除了视图设计,在设计前后端交互的时候,后端的压力也得明白,而且你也必须和操作系统打交道,比如一些操作系统的特性,如果可以利用得当,可能会产生许许多多有意思的功能。

CATALOG
  1. 1. 一,app的分类
    1. 1.1. 1.单机软件
    2. 1.2. 2.分布式软件(C/S架构)
  2. 2. 二,数据的传输
  3. 3. 三,server端
  4. 4. 四,数据库
  5. 5. 五,前端