如果你想开发一个应用(1-13)

大家新年快乐 2018事事顺利

前端技术选型

因为作为一个后端开发人员,前端都是摸索着前进,所以会写的比较简单。

选型第一步

做出原型图后,就要像用什么技术来实现这个App了,最理想的方式当然是原生的Android或者IOS了,但这两个首先就被pass掉了,因为:

对于一个开发者来说,同时开发两个客户端实在是太难了,所以,最终选择还是使用js进行开发,然后用cordova技术包装成App文件。

选型第二步

既然确定了使用js进行开发,接下来就是js框架的选择了,摆在前面的同样有很多选型,JQuery,react,ng,vue等,最终我选择了vue进行开发,原因么,也很简单:

扣除jquery之后,也只有vue的曲线最平了。并且作为国人开发的框架,目前资料也很多,还大部分都是中文的,甚至在知乎,微博上能和开发者用中文对话,还有比这个更幸福的事情么?

脚手架

  1. 要进行开发,首先需要安装 node.js,安装方式不再展开。
  2. 安装npm
  3. 安装脚手架 vue-cli npm install -g vue-cli 完成后输入vue,显示vue信息表示安装成功
  4. 创建文件夹进入后,输入vue init webpack jtodos 然后进入等待,完成后则表示安装成功。
  5. 进入项目:cd jtodos 注意,这里的jtodos均指的是vue项目,不要与java项目混淆。
  6. 安装依赖 npm i 再次进入等待
  7. 安装完成后,继续输入npm run dev
  8. 待提示运行成功后,在浏览器输入localhost:8080 这时候应出现如下画面:

至此,一个vue的项目已经搭建完成。基本的目录结构如下:

而我们的开发,主要就在src目录中进行。

UI

作为一个前端渣来说,从头到尾都是自己写样式,写js的画,实在是有些强人所难。所以,选择一个UI框架是必不可少。

虽然vue是与view松耦合的,可以支持任何ui框架,但是选择一个vue相关的ui框架还是能节约自己不少的精力,经过筛选,最终我选择了MuseUi

MuseUi主要特点如下(摘自主页):

  • 基于 vue2.0 开发
  • 组件丰富
  • 丰富的主题,支持自定义主题
  • 可以很好的配合 vue 的其它插件vue-router , vue-validator 使用
  • 友好的 API

安装方式为为敲入:

npm install muse-ui --save

然后在main.js内引入框架:

import MuseUI from 'muse-ui'
import 'muse-ui/dist/muse-ui.css'
Vue.use(MuseUI)

至此,UI框架引入完成。

router

在一个应用中,哪怕是单页应用,也不可避免的牵扯到页面切换。如果全部用硬编码的方式切换的画,即累有容易出错,所以引入一个路由管理的框架不可避免,在vue上也没有什么好选择的,基本上都会使用vue-router,首先进行安装:

npm install vue-router --save

然后同样需要在main.js里进行配置:

import Router from 'vue-router'
import router from './router' //这里是router的配置

Vue.use(Router)

最终,还要在vue里载入:

new Vue({
  el: '#app',
  router,
  template: '<App/>',
  components: { App }
})

至此,vue-router在main的部分配置完成,然后贴上router/index.js中的代码:

import Vue from 'vue'
import Router from 'vue-router'
import Index from '@/views/Index.vue'

export default new Router({
    mode: 'history',
    routes: [
        {
            path: '/',
            name: 'Index',
            component: Index
        }
    ]
})

这里主要对路由进行注册,注册完成之后,就可以使用name来对应不同的组件进行路由切换。

交互

一个不与服务端交互的app,不是一个好app----阿基米德

不管他有没有说过这句话,目前纯单机的app可以说基本上是没有,尤其是我们现在要制作的这个app,每个todo项更要在云端进行保存,所以与服务端的交互是必不可少的。这时候有一个网络的框架肯定是必须的了,由于尤达(vue的作者)都宣布不再更新vue-resource,而推荐使用axios,那么我也就不费心选择了,直接使用axios。

安装:

npm install axios --save

配置加载:

import axios from 'axios'

axios.defaults.timeout = 5000  //超时时间
axios.defaults.baseURL = 'http://localhost:8082'  //域名

然后为了操作方便,进行一下赋值:

Vue.prototype.$http = axios

这样就可以用:

this.$http.get(....)这种方式进行异步操作

vuex

想一想一个普通的网站,比如jsp网站 列表页-->详细页,中间通过request传值,单更多的信息是存储在一个公共的区域内,比如缓存,比如数据库等,那么vue中如何做呢?

vue也很体贴的准备了一个状态管理的软件,你可以把他想象成前端的缓存,数据库,或者什么都行,只要知道他是存储一下公共状态信息的东东就可以了。

继续完成vuex的安装:

npm install vuex --save

然后在项目中进行注册:

import Vuex from 'vuex'
Vue.use(Vuex)

同样需要设置应该vuex的配置文件:

import store from './store'

然后进入store中index.js的代码:

const state = {

}

export default new Vuex.Store({
    state
})

至此,前端框架目前可预见的架构已经搭建完成,接下就进行代码开发,但是在开发之前我们先回到后端。

数据模型的修改

根据原型:

我们可以看到原来设计的数据模型已经完全不符合要求了,所以我们要对数据模型进行修改。

由图一的用户认证功能可知,用户模型至少需要用户名和密码,并且我们从电影中可以看到,分男版和女版的样式,所以至少需要性别,而且在电影中还有头像等信息,所以还需要头像,但是这些信息与登录无关,所以为了管理的便利性和登录的性能,我们创建两个模型,User和UserMessage,下面是代码:

User:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)//表示db中id的生成方式
private Integer Id;
private String name;
private String password;
private String passwordSalt;
private Date createTime;

//get...set...

UserMessage

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private int userId;       //User表的id
private String nickname;  //昵称
private String motto="";  //格言 座右铭
private int sex=1;  //1 男 0女

由电影内部可知,记录项是分组的,比如影片内的禁止事项,日记等分组,所以我们先创建一个记录分组模型:

TodoGroup

@Entity(name = "todogroups")
public class TodoGroup {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String groupName;
    //1 带删除线 0 不带
    private Integer del;
    ////1 此项目组样式,暂时没有 都默认为0
    private Integer style;
    private Integer userId;   //此项目组所属用户
    private Integer isDefault;//是否为默认组(默认日记为默认组)
    private String icon;      //此项目组的图标
    private Date createtime;  //创建时间
    //getter setter
}

从图二图三可知,现有的todo模型内的数据线远远不够,经过考虑,可知一个记录项内所需数据应该有 标题,内容,发表时间,心情,发表地点,天气等,经过修改,新数据模型如下:

Todo

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String item;      //标题
private Date createTime=new Date(); //创建时间
private Integer userId;             //记录用户
private String content;             //内容
private Integer groupId;            //所属组
private Integer weather;            //天气图标
private String weatherContent;      //天气内容
private Integer mood;               //心情
private Integer bookmark;           //是否标记
private String address;             //发布地点
private double lng;                 //地点坐标
private double lat;                 //地点坐标

同时,还需要一个用于记录组织的tag模型,tag模型就比较简单了,只记录内容即可:

@Entity(name = "tags")
public class Tag {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String tagName;
    private Integer userid;
    private Integer tagCount;
}

tag与todo关联模型略

请自行根据模型修改DB

然后根据模型设计持久层的数据库访问类,这时候就提现出jpa的好处来了,模型修改后,持久层几乎不用做任何修改,仅仅添加几个类即可。

最终持久层目录及模型层目录如下:

至此,后端的模型修改完毕,之后将进行前后端同步开发,通过webapi的方式进行数据交互。

谢谢观看。

原文地址:https://www.cnblogs.com/jiangchao226/p/8184953.html

时间: 2024-08-02 14:16:05

如果你想开发一个应用(1-13)的相关文章

如果你想开发一个应用(1-12)

到了现在,整个程序的结构已经出来了,层级清晰,代码简练(暂时不考虑分布式等附加功能),之后就开始在这个架构上扩充业务功能. 产品化 现在的程序,不管是不是承认,都透着一股弄弄的demo味,但是,谁没有一点野心呢?虽然现在只是一个小小的记事性的demo,但谁知道日后会不会成为东半球最好的记事型APP呢. 在去年夏天有一部现象级的电影上映,就是<你的名字>,里边男女主角用来记事的APP非常的吸引人,并且我发现在功能上,与我们现有的demo很是契合,下面我们从影片的截图分析一下所需的功能,并根据需要

如果你想开发一个应用(1-5)

你是否会觉得奇怪?每次通过IDE运行的tomcat,让应用进行启动调试,发现他的页面都比我的钱包还干净,为什么呢,我之前添加了的好多项呢,说好的三点钟看书呢? 持久化基础 这时候,终于轮到持久化技术出场了,所谓持久化就是把数据转换为持久状态,如存储在文件或数据库中,以便能够持久的保存,这里介绍一下使用jdbc来进行数据库操作的方法,顺便在这时介绍一下jsp的bean. jdbc是一个专用的数据库链接桥接的方法.提供里一套数据库操作的接口,然后由各个厂商对此进行实现,同时,各种的orm操作,实际上

推送类服务大集合,如果你想开发推送的服务,可以参考下。

推送类的服务,开发者如果想开发推送类的,但又不知道如何选择,不知道哪个推送类的对自己的开发是否有利.devstore为你整合,汇集了上百种的第三方服务,这里为你分享一些推送类的服务.http://www.devstore.cn/service/serviceClassfiy/24.html推送类服务大集合,如果你想开发推送的服务,可以参考下.,布布扣,bubuko.com

【刘文彬】【精解】开发一个智能合约

原文链接:醒者呆的博客园,https://www.cnblogs.com/Evsward/p/contract.html 智能合约 这两天被老大搞去搬砖,学习计划有变但无大碍,这篇文章将仔细分析智能合约相关内容. 关键字:智能合约,remix,Solidity,truffle,geth,leveldb,datadir,ganache,web3j 合约 合约也称合同.协议,是甲乙双方参与的,制定一系列条目规范双方权利与义务的文件.智能合约是电子化的,自动执行的,去中心化的,具有不可抵赖性,本质上它

如果你建造了一个精良的模型却没人用,你肯定不会得到赞誉(转)

注:本文编译自 How to do Data Science ,作者 Brandon Rohrer 为微软高级数据科学家. <哈佛商业评论>曾宣称“数据科学家”是二十一世纪最性感的职业.所谓性感,既代表着难以名状的诱惑,又说明了大家对它又不甚了解. 如何做好数据科学呢? 微软高级数据科学家 Brandon Rohrer 概括了做数据科学的七大步骤,手把手教你做数据科学. 1. 获取更多的数据 数据科学的原材料是数字和名称的集合,测量.价格.日期.时间.产品.标题.行动等,数据科学无所不包.你也

2016开发一个app需要多少钱?app开发需要哪些成本-app开发问题汇总-广州达到信息

作为一个APP开发从业者,被外行的朋友们问及最多的问题是,"做一个网站需要多少钱?"或者"开发一个APP需要多少钱?".作为开发过完整网站项目和手机APP的人,今天从产品经理的角度,一起来算一下开发一个中小型APP从无到有需要做哪些工作,以及为达成使命,需要付出多少金钱代价. 现在主流有两种开发模式,一种是使用现成的模板进行修改,另一种则是全部重新设计开发. 使用模板工作量较小,如果是一款功能简单,客户要求不太高的APP,只需要让美工对前台的页面进行一定程度的修改,

我想写一个前端开发工具(一):在npm发布模块

有必要说说我为什么要开始写这个 我最近忙于公司的项目,一直没有抽出时间来写文章.本来想每个月写一片文章,保质保量,无奈上个月没有坚持. 这段时间有点忙,主要是由于公司业务调整,我从原来的广告项目中调整到新业务线的前台页面开发了,和以前一样,还是带着3.4个兄弟姐妹.不同的是以前的项目周期普遍偏长,可以让每个同学有时间从头到尾的把项目吃透,而现在做C端的前台页面往往开发时间非常的短,比如我们就要在1.2个月完成业务线所有前台页面的开发.联调.测试.部署,以及下一步的迭代.由于是从零开始,不存在基于

13 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件  queue队列 生产者消费者模型 Queue队列 开发一个线程池

本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 操作系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把

如果你想为您的公司制作(修改)一个企业官网,那么请先看看这篇文章

一个企业网站有什么功能?,为什么要为自己的企业做自己的官网! 1.企业宣传作用,(似乎是废话) 2.在线交易作用. 事实上,给你的网站接入企业支付宝,微信支付等.可以达到实时交易的功能,但很多网站都忽视了这点. 3.资料下载 我们完全可以将企业的一些共享资料,比如合同模版,产品资料放到企业官网供客户下载,但同样,对于很多企业都完全忽视了这点. 4.在线客服作用. 将自己的官网加入一些在线客服软件,比如 CC客服,53客服等,可以实时的跟访问到您官网的用户进行沟通.常见的有医院官网,几乎所有的医院