一个APP的迭代(2) - 基础篇
2018-01-27 18:33
344 查看
本篇主要介绍做出最基础的功能APP
用户的基础需求写日记
查看日记
修改日记
删除日记
无论多复杂的APP都是从最基础的功能开始的,例如像微信,一开始也就只有通讯录和聊天功能,后来逐渐迭代,就有了公众号、小程序等功能,万丈高楼平地起嘛。
这里我觉得,如果要打造一款产品,一开始就想得太远想得太多功能,我觉得也不太现实,毕竟精力与能力是有限的。
但从另一个角度来看,用户喜欢简单、有趣的产品。
4个基础需求:写日记、查看日记、修改日记、删除日记,创建以下三个页面
最基础的功能页面
写日记页面
查看日记页面
修改日记页面
前端技术方案 ,Cordova 、Angular2、Ionic2、TypeScript
创建ionic2项目参考 ionic2官网
Angular2 参考 Angular2中文网
TypeScript 参考 TypeScript中文网
是的,日记APP就这三个页面,写日记查看日记删日记,用户打开日记APP首先看到的是日记列表,日记列表的右下角有添加日记功能,点击日记列表项可以查看日记,长按日记列表项会弹出删除日记、修改日记的菜单。
看上去很简单,但是从技术的角度来看,一点也不简单,因为要考虑软件架构的问题。
功能细分
读取日记列表
读取单条日记列表
保存日记
修改日记
删除日记
日记数据是保存在本地的sqlite轻量级的数据库,还要单独为sqlite做一个简单的orm框架,orm框架是必须的,除非是打算做完这个版本APP就不做了。这里先做这个框架,TypeScript的类定义代码如下:
class Entity { constructor(dbname: string){} init<T>(entityModel: { new(): T }): Entity{} getDBName(): string{} createTable(colums: Array<ColumnInfo> | any){} insertDatas<T>(_data: Array<T>): Promise<boolean>{} insertData<T>(data: T): Promise<boolean>{ } where<T>(where: T | string){ } async updateData<T>(_data: T | string): Promise<boolean>{} async saveData(data: any): Promise<any> { } getData<T>(): Promise<Array<T>>{ } doQuery<T>(sql: string): Promise<Array<T>>{ } async deleteData(): Promise<boolean>{ } dropTable(){ } onfail(t, e){ } toArray<T>(obj): Array<T>{ } toUpdateArray<T>(obj): Array<T>{ } } class ColumnInfo { name: string; type: string; } class ColumnForceType { name: string; type: string; }
总共有1000多行代码,没错,单单是这个orm就要1000多行代码,主要是想告诉大家,即使是这三个简单的页面也要写很多基本代码。
可是这个ORM有什么用呢?因为可以这样用,见下面的代码:
定义一个表模型
import { attachment } from './attachment'; import { Table, Column, ColumnBoolean } from "../../Models/Library/Entity"; @Table("note_details") export class note_details { constructor() { } @Column('char(36) PRIMARY KEY NOT NULL') id: string; @Column('varchar(255) DEFAULT NULL') title: string; @Column('text') content: string; @Column('varchar(50) DEFAULT NULL') weather: string; @Column('char(36) NOT NULL') user_id: string; @Column("DATETIME DEFAULT (datetime(CURRENT_TIMESTAMP,'+8 hour'))") create_time: string @Column("DATETIME DEFAULT (datetime(CURRENT_TIMESTAMP,'+8 hour'))") update_time: string; @Column("DATETIME DEFAULT (datetime(CURRENT_TIMESTAMP,'+8 hour'))") modified_time: string; @ColumnBoolean @Column("bit(1) NOT NULL DEFAULT 'true'") valid: boolean; @Column("bit(1) NOT NULL DEFAULT 'false'") is_sync: boolean; photos: Array<attachment>; }
还有一部代码没帖子出来,这里就略过了,ORM使用方法如下
//diaryInfoModel:note_details是一条记录 var noteDataBaseService = new DataBaseService(this.dbName, note_details); var result = noteDataBaseService.SaveRecordNative(diaryInfoModel);
用orm的好处是可以简化开发,开发效率高。
接下来实现日记类相关方法的代码:
export class DiaryService { constructor(){ } async DeleteDiary(id: string): Promise<boolean>{} async PushDiaryNative(diaryInfoModel: note_details): Promise<boolean>{ } async FecthDiaryById(diaryId: string): Promise<note_details> { } async FecthDiarys(page: number): Promise<Array<note_details>> {} }
封装了orm代码后,再去写业务类的代码就简法很多了
至此一款具有增删改查的文本日记类APP就大功告成了
最后你需要用ionic cordova命令编译成apk和签名,然后才能发布到应用市场。
cordova命令请参考cordova官网
很快就会有用户使用,用户使用的过程中会提一些很好的意见。
目前该app还只能本地使用,日记并不能备份到服务器,如遇换手机时就需要备份,然后在另一台手机还原了。
下一篇博文 网络篇 ,主要介绍在此功能上添加备份日记功能的迭代。
想要看效果的朋友,可以下载完整版 小励日记app 。
相关文章推荐
- 一个APP的迭代(3) - 网络篇
- 一个独立开发者总结的App 迭代设计思路
- 一个APP的迭代(1) - 开始篇
- 【如何快速的开发一个完整的iOS直播app】(播放篇)
- android:如果手机安装了app则打开一个activity,如果没有安装则去到android market如何在HTML页面实现
- 做一个 APP 需要多少钱
- 从AppStore获取一个iOS App的版本信息
- 未能加载文件或程序集“App_Code”或它的某一个依赖项。系统找不到指定的文件。
- ios快速创建一个app框架
- 一个APP开发有那么难吗?
- 家装APP哪个好,如何自己制作一个互联网家装APP?
- 【新建项目&使用viewPager】实现一个Android电子书阅读APP
- Android面试常见问题:如何在不发一个新版本的情况下更新App布局?
- 我能否把一个开发者帐号下的app转移到另一个开发者帐号下面?
- 在weblogic11g上发布项目遇到的一个错误(不支持web-app_3_0)
- Android在一个APP中通过包名或类名启动另一个APP
- android中怎么把自己须要的app启动图标集中到一个弹出框中
- 通过Bmob + Android轻松制作一个APP
- 如何为你的APP起一个好名字?
- Android APP启动向导 一个非常简单的ViewPager向导: