程序员如何实现财富自由系列之:开发并销售自己的移动应用

发布于:2023-09-27 ⋅ 阅读:(92) ⋅ 点赞:(0)

作者:禅与计算机程序设计艺术

1.简介

一、写作目的

从事移动互联网相关的领域,不少人都对“移动应用”这个词汇陌生。在本系列教程中,我将向读者们介绍一个很重要的话题——“如何开发并销售自己的移动应用”。本文为系列文章的第一篇,主要阐述了移动应用开发方面的知识和技能要求。当然,作为系列文章中的一部分,本文将会帮助读者实现自己的目标——实现财富自由。

二、读者对象及需求分析

目标受众

目标读者:具有一定编程经验、对互联网开发有兴趣、希望通过阅读这篇文章提升自己在移动应用开发上的能力,或是想要寻找专业的移动应用开发课程或者培训机构的学生。

技能要求

  • 阅读文章时,要求可以快速理解作者所讲的内容,并且具备较强的逻辑思维能力。
  • 对计算机编程、软件设计等相关专业知识有一定的了解,包括但不限于编程语言、数据结构、算法、数据库、面向对象设计、Web开发、移动应用开发、调试等。
  • 有一定的英语水平。

    文献综述

    目前国内关于“移动应用开发”的一整套体系还没有形成。很多公司都在推出自己的移动应用产品,这些产品往往提供更加丰富的功能,但同时也带来了巨大的运营、管理、投入、风险等成本。因此,需要有一套完整的流程、方法论来帮助企业降低开发、维护、部署、运营等环节的成本,提高产品质量和效率,从而达到盈利目的。如何实现自己的移动应用并获得市场上青睐是每个开发人员都需要考虑的问题。本文将分享一种以开放源码的方式实现自己的移动应用的方法。

    2.移动应用开发概述

    2.1 移动应用的定义

    移动应用(Mobile App)是一个应用程序,它可以在任何手机、平板电脑甚至其他设备上运行,从而实现与网络服务间的无缝连接。

    2.2 移动应用分类

    移动应用分为四类:
  • 基于平台的应用(Native App):这种类型的应用是运行在特定平台上的应用程序,其本质是在操作系统级别上运行的。它们提供专门针对该平台的优化,拥有高度性能和视觉效果。iOS与Android系统上的应用都是属于这一类型。
  • HTML5 + CSS + JavaScript 的混合型应用(Hybrid App):这种类型的应用是基于浏览器环境运行的,通过HTML、CSS和JavaScript进行渲染。它们具有跨平台的能力,可通过WebApp来实现跨平台的适配。Facebook Messenger、WhatsApp和Twitter for Web就是属于这一类型。
  • Cordova + PhoneGap 的第三方SDK应用(Third-party SDK App):这种类型的应用是基于PhoneGap、Cordova或其他第三方SDK构建的。它的特点是通过原生的SDK接口访问硬件功能,可实现完整且专业的用户体验。Google Maps、Instagram、YouTube Mobile就是属于这一类型。
  • WebView应用(WebView App):这种类型的应用是基于Webkit引擎,通过WebView控件展示的网页。它的特点是纯粹的Web内容,拥有完整的网页浏览功能。浏览器与操作系统自身的特性结合,呈现出各个平台独有的用户界面。微信、微博、QQ空间等应用就是属于这一类型。

    2.3 移动应用的优势

  • 免费:许多移动应用是开源的,免费提供给所有用户。
  • 随处可用:由于应用是基于云端计算资源,因此用户可以随时下载、安装和更新应用。
  • 更广泛的设备支持:手机、平板、桌面、服务器……各种设备均可运行同样的代码。
  • 没有安装包大小限制:由于应用是由HTML、CSS、JavaScript组成,所以占用内存和存储空间非常小。
  • 可定制化:对于一些复杂的应用,可以通过Web开发技术来实现定制化的功能。
  • 安全性高:由于应用是运行在自己的容器环境中,所以拥有更高的安全性。
  • 用户参与度高:由于应用可以随时接收通知、推送消息,所以用户满意度非常高。

    2.4 为什么要开发自己的移动应用?

    移动应用开发的主要目的是为了满足用户对应用程序的需求,提高用户体验和增长收益。当用户购买应用时,就相当于是在付费购买使用该应用的服务。比如,买车的时候就可以考虑买一款能实时显示行驶路线的地图应用;买房子的时候可以考虑租房的短租应用。除了赚钱之外,用户也可以通过应用获知各种最新信息、提供建议或反馈,从而促进社交互动,提高生活品质。总而言之,通过应用实现的各种便利性和价值,远远超过那些重复性的日常任务。

    3.移动应用开发环境搭建

    3.1 安装开发环境

    在开始开发前,需要先确定自己的开发环境。这里推荐大家使用Visual Studio Code编辑器。 首先,下载Visual Studio Code。然后打开终端,输入以下命令进行安装:
    sudo snap install --classic code # Ubuntu系统
    brew cask install visual-studio-code # Mac OS X系统
    choco install vscode # Windows系统
    之后再通过点击菜单栏“Terminal > New Terminal”打开新的终端,输入以下命令检查是否成功安装:
    code -v
    如果输出版本号,则表示安装成功。 安装完成后,创建工作目录,右键单击空白区域并选择新建文件夹,命名为“mobileApp”,然后进入该目录。
    mkdir mobileApp && cd mobileApp

    3.2 创建项目

    打开Visual Studio Code,按下Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(Mac),输入“hello world”,选择“Hello World”模板。等待几秒钟,VS Code就会创建一个新文件“helloWorld.js”和一个工作区。文件名为“helloWorld.js”的作用是指定项目文件的名称,通常习惯把项目文件名设置为“index.html”或“app.js”。

    3.3 配置开发环境

    接下来,我们配置开发环境,添加必要的插件。在VS Code左侧的扩展商店中搜索关键字“Live Server”安装“Live Server”插件。打开配置文件“settings.json”,在“Extensions”选项卡下添加如下配置:
    "liveServer.settings.donotShowInfoMsg": true, // 隐藏Live Server欢迎信息
    "liveServer.settings.NoBrowser": false, // 使用默认浏览器打开页面
    "liveServer.settings.root": "www", // 指定项目根目录
    "liveServer.settings.ignoreFiles": ["**/*.map"], // 不监控Map文件变化
    其中“liveServer.settings.donotShowInfoMsg”用于关闭Live Server插件启动时的欢迎信息;“liveServer.settings.NoBrowser”用于控制是否在浏览器中打开页面;“liveServer.settings.root”用于设置项目根目录;“liveServer.settings.ignoreFiles”用于指定不需要监控的文件类型。

    3.4 文件目录结构

    mobileApp
      ├───css
      │   └───style.css
      ├───img
      ├───js
      │   └───script.js
      └───index.html
    完成以上配置后,VS Code会自动生成上述目录结构。

    4.移动应用结构设计

    一般来说,移动应用的结构包含如下几个层级:
  • View:界面层,用来呈现与用户交互的组件,比如按钮、文本框、图片、列表等。
  • Model:数据层,用来处理应用的数据,比如保存用户的设置、记录用户的行为数据、本地化翻译等。
  • Controller:逻辑层,用来处理用户的交互事件,触发Model的业务逻辑。
  • Utility:工具层,用来辅助View、Controller、Model之间的沟通和数据传递。

    5.View层设计

    5.1 设计原则

    移动应用的界面设计通常遵循以下设计原则:
  • 简单化:移动应用的界面应该尽可能的简洁,只有必要的元素才能突出重点。
  • 精准化:移动应用的界面应该以目标用户的使用习惯为出发点进行设计,避免设计过度复杂。
  • 直观化:移动应用的界面应该清晰易懂,让用户能够通过视觉感受和触觉体验操作。
  • 统一化:移动应用的界面应该采用相同的视觉风格和布局模式,避免造成视觉疏离。

    5.2 典型页面设计

    最基础的页面是登录页面。一般情况下,登录页面由两部分构成:
  • Header:头部导航栏,通常包含Logo、搜索栏、更多功能按钮等。
  • Body:登录表单,用来输入用户名和密码。

    5.3 页面间切换动画

    页面切换时的动画设计可以让用户体验更加流畅。最常用的切换方式是渐隐切换。它的基本思想是当前页面完全消失后,加载下一页面,使得两个页面之间切换得体验更加流畅。以下是用CSS实现渐隐切换的动画:
    .page {
    position: absolute;
    width: 100%;
    height: 100%;
    left: 0;
    top: 0;
    opacity: 0;
    transition: all 0.5s ease;
    }
    .page.active {
    opacity: 1;
    }
    这样,当页面切换时,只需要改变当前的页面的“active”类,其他页面的样式就会自动变成透明。实际例子如下: HTML代码如下:
    <div class="page active">
    <h1>Page A</h1>
    </div>
    <div class="page">
    <h1>Page B</h1>
    </div>
    CSS代码如下:
    body {
    margin: 0;
    padding: 0;
    background-color: white;
    }
    .container {
    display: flex;
    justify-content: center; /* 中心对齐 */
    align-items: center; /* 垂直居中 */
    height: 100vh;
    }
    .page {
    position: absolute;
    width: 100%;
    height: 100%;
    left: 0;
    top: 0;
    opacity: 0;
    transition: all 0.5s ease;
    }
    .page.active {
    opacity: 1;
    }
    .page h1 {
    font-size: 3rem;
    color: black;
    text-align: center;
    }
    .next {
    cursor: pointer;
    position: fixed;
    bottom: 20px;
    right: 20px;
    width: 50px;
    height: 50px;
    border-radius: 50%;
    background-color: blue;
    line-height: 50px;
    text-align: center;
    color: white;
    z-index: 9999;
    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
    }
    JS代码如下:
    const pages = document.querySelectorAll(".page");
    let currentIndex = 0;
    function changePage() {
    currentPage.classList.remove("active");
    if (currentIndex === pages.length - 1) {
      currentIndex = 0;
    } else {
      currentIndex++;
    }
    const nextPage = pages[currentIndex];
    nextPage.classList.add("active");
    }
    changePage(); // 初始化显示第一个页面
    document.querySelector(".next").addEventListener("click", changePage);
    通过上述代码,当用户点击“next”按钮时,就会切换到下一页面。初始页面显示“Page A”,用户点击“next”按钮后,页面会显示“Page B”,再次点击“next”按钮后,又回到了“Page A”。

    6.Model层设计

    6.1 数据存储方案

    移动应用的数据存储方案通常分为两种:
  • 本地存储:也就是直接保存在设备的内存中,可以根据应用的生命周期进行持久化存储。
  • 远程存储:这部分数据会被保存到云端,供应用使用。 选择哪种数据存储方案需要根据应用的特点、设备性能、成本以及数据安全性来做决定。

    6.2 基础数据结构设计

    移动应用的数据结构设计一般分为实体关系模型设计和对象关系映射设计。

    实体关系模型设计

    实体关系模型(Entity-Relationship Model,ERM)是一个描述数据实体之间的关系的模型,用图的方式呈现实体、属性、联系以及规则。ERM是DBMS(数据库管理系统)的核心组成部分。 实体:实体是ER模型中的顶点,是客观事物的抽象,通常是某个固定的物理实体或抽象的人、组织、过程等。实体可以有属性,属性用来刻画实体的特征。 属性:属性是实体的一个方面,它代表着实体的一部分信息。例如,书籍实体有ISBN编号、名称、出版日期、作者、分类、价格等属性。 联系:联系是指两个或多个实体之间的某种联系。例如,作者和书籍之间的联系表现为一张三角形,表示有著作权的作者创造了这本书。 规则:规则是对实体之间关系的约束条件,如“任何作者只能写一种类型的书”、“任何书籍必须有一定的价格”。

    对象关系映射设计

    对象关系映射(Object-Relational Mapping,ORM)是一种技术,它把面向对象的编程风格转换成关系型数据库的风格。ORM通过中间层(即ORM框架)将应用程序的数据访问接口和底层数据库进行交互。ORM框架负责创建、查询、更新和删除数据库中的数据,并将数据转换成应用程序的对象。 ORM框架一般分为两大类:
  • Hibernate:Hibernate是Java世界中最流行的ORM框架,它集成了众多优秀的Java技术,使得ORM开发变得异常简单。
  • Django ORM:Django ORM是Python世界中最流行的ORM框架。 ORM框架的使用有助于提高程序的灵活性、可测试性、可复用性和可维护性。

    6.3 服务端API设计

    移动应用的服务端API(Application Programming Interface)设计一般分为RESTful API和GraphQL API。

    RESTful API

    RESTful API(Representational State Transfer)是一种基于HTTP协议的服务端API设计风格。它通过资源的集合、URL和标准HTTP方法来规范客户端和服务端的通信。RESTful API一般采用JSON格式的数据传输。 RESTful API的好处是简单易懂,具有良好的兼容性,且易于测试。但是缺点是过度灵活,难以满足复杂业务场景。

    GraphQL API

    GraphQL API(Graph Query Language)是一种服务端API设计风格,它通过GraphQL查询语言来规范客户端和服务端的通信。GraphQL允许客户端请求从服务端获取任何需要的数据,而无需预定义固定的数据结构。 GraphQL API的优点是简单易懂,能够解决RESTful API的局限性,有效地解决复杂业务场景下的性能问题。但是缺点是初学者学习曲线陡峭。

    7.Controller层设计

    7.1 路由设计

    移动应用的路由设计一般采用前端路由和后端路由。

    前端路由

    前端路由是指利用HTML的history API和hashchange事件,将不同页面的URL与对应的视图关联起来,实现页面间的切换。前端路由的优点是简单、快速,无需额外的后台服务支持。缺点是页面刷新后,页面回退不能正常工作。

    后端路由

    后端路由是指使用服务器端的路由模块,将不同的URL指向不同的视图,实现页面间的切换。后端路由的优点是支持页面的回退,页面切换速度快。缺点是前端需要编写相应的代码,增加了后台服务器的压力。

    7.2 模块划分

    模块划分是指按照功能和职责把页面划分成不同的模块,并给模块分配相应的权限。模块划分能够有效地减轻后端工程师的工作负担,提高开发效率。

    7.3 异步请求处理

    移动应用的异步请求处理通常采用AJAX技术。AJAX(Asynchronous JavaScript and XML)是一种Web开发技术,它通过异步的HTTP请求实现了对页面的局部更新。 AJAX的最大优点是可以实现局部更新,提升用户体验。它的使用也具有一定的挑战性,尤其是出现错误时的处理。

    8.Utility层设计

    Utility层设计主要负责处理项目中的工具函数、通用组件以及第三方库的集成。

    8.1 工具函数设计

    工具函数设计一般采用模块化的形式,并将常用的工具函数封装成独立的模块。工具函数的好处是能够方便开发者调用,提升开发效率,减少代码冗余。

    8.2 组件库设计

    组件库设计主要是指设计和实现常用组件的集合。组件库的好处是降低开发者的开发难度,提升开发效率,并减少代码重复。

    8.3 第三方库集成

    第三方库集成是指将常用到的第三方库引入项目中,并完善相应的文档。第三方库的集成可以提高开发效率,减少重复开发,改善代码质量。

    9.移动应用发布与迭代

    9.1 应用发布

    应用发布指的是将应用打包、签名、上传到应用商城或第三方应用市场。应用发布涉及的工作包括:
  • 编译:将代码编译成为可执行文件。
  • 打包:将编译后的代码打包成安装包。
  • 签名:为安装包签名,保证安装包的安全性。
  • 分发:将安装包分发到应用商城或第三方应用市场。
  • 测试:测试应用的安装、运行、功能是否符合要求。
  • 提审:将应用提交到应用商城或第三方应用市场的审批流程。
  • 上架:将应用上架到应用商城或第三方应用市场。

    9.2 应用迭代

    应用迭代(Iterative development)是指不断完善应用功能,保持应用的稳定性、可靠性和可用性,并反馈用户反馈,不断修正错误和提升用户体验。应用迭代可以分为:
  • 小步快跑:每天发布更新,及时修复错误。
  • 大步踩刹车:每周发布更新,在严格的测试流程下迭代。
  • 沙漏法:一周发布一次更新,逐步迭代。

网站公告

今日签到

点亮在社区的每一天
去签到