一个Almost完整的电商项目后台+安卓客户端(送给终将逝去大三).md

一转眼就已经大三了,作为非CS专业的一个某理工学院普通大学生,应该对自己的未来做规划了。于是,大三开始我就开始着手准备一个“大项目”。将前两年学习的知识做一个总结,归纳,恰巧,当时快到双11了。于是就有了这个项目。项目的名字叫OscsMall,为什么叫这个名字我也不知道。当时想着是 Open Source Soda Cream Mall。至于Almost是因为整个项目缺少了支付部分的代码,原因是需要企业资格,而且八阿哥很多,所以借用了锤子手机的Almost概念。整个项目分为后端和客户端,后端代码显得稚嫩,客户端代码也算拿的的出手。还恳请个位大佬轻喷。项目自然参考了其他大神的代码。这个项目我也会一直维护下去的,恳请大佬们star一下。也希望个位大大能够开发前端与IOS端,和我一起将这个项目做好。

image

后台

后台其实没什么好介绍的,整个项目使用Spring+MyBatis+MySQL,项目采用MVC模式。包含前台和后台管理部分代码。是一个很普通的电商项目,包含了8大结构,6大模块。
API

项目结构

common

作用:用来处理公共的信息,包括Token,常量,全局异常,公共类等封装

controller

作用:包括前台和后台部分的controller代码

service

作用:项目中要到的service部分

dao

作用:负责dao

pojo

作用:数据库对象

vo

作用:view object前端对象

util

作用:一些简单的工具类

项目模块(详情见文档)

用户信息

包括:用户登录,注册,信息获取,注销等流程,管理登录

商品信息

商品增加删除更新,同时放置非管理员对商品的属性进行操作

商品分类信息

商品分类信息,包括子分类的信息获取

购物车

购物车添加,删除,选择,更新等管理

订单

订单生成,不同类型的订单查询等管理

地址

地址增加,删除,选择等功能

具体的内容在wiki

客户端

先上动图吧

  • 首页(真机测试非常流畅,gif是用ffmpeg处理过的,所以十分卡顿)


    Index.gif
  • 分类


    Sort.gif
  • 寻觅(混合开发,图中展示了js与java互相调用的场景)


    DiscoverMini.gif
  • 购物车(购物车每次点击都以为着网络请求,所以这里的请求是相对比较密集的)


    Cart.gif
  • 个人中心(我的,其中空白的是由于我直接更改数据库造成的)


    Person.gif

当然还有物品搜索,二维码,启动页,引导页等页面我就不展示了。

客户端的整体架构

App架构.png

整体采用了单Activity多fragment的设计思路

网络模块(两种)
  1. 使用rxJava与retrofit2和okhttp3组成网络请求框架(有些时候Rxjava并不能按照预期给出结果,让我有点苦恼。水平不够,嘤嘤嘤)
  1. 未使用rxJava的网络框架,整个请求写法上类似于Velloy
App配置相关
  • 整个App的图标全部使用icon
  • 使用Builder设计模式来配置整个应用信息(使用什么icon,内置了iconify中给出的所有Icon)
代理Activity

作为整个程序唯一一个Activity,作为所有Fragment的代理

MVP相关

作为MVP模式的基类

UI相关

UI处理部分

App的整体流程

App的整体流程分为三部分
第一部分

流程:首页展示前,整个Activity作为Fragment的调度站,负责Fragment的跳转和信息传递。这样的好处是,避免跳转流程复杂,导致自己开发时候很晕。一般Fragment的跳转需要App的当前状态,用户的当前状态,通过这两状态去决定下一个Fragment是什么。

同时整个Activity代理了所有的toast信息的展示,和Loading加载。这样整个流程更加清晰。


第一部分.png
第二部分

首页展示后,整个Bottom Fragment作为调度站,负责在各个页面之间进行跳转。

第二部分.png

第三部分

不同页面需要其他额外的Fragment,由该Fragment自己掌控。

第三部分.png

目的:

App整体流程是我自己的一些小技巧的总结,让同级的Fragment之间的调用更加清楚,这样设计,如果App加入新的类型的启动页,我们就不用更改相关所有Fragment的代码,而只需要更改Activity的代码就可以了。

总结

流程总结.png

整个App被分成4层,第一层是Activity,把握了第二层的Fragment的调用顺序,第二层Fragment把握了第三层的调用,以此类推。如果我们发现某一层的调用出现问题,那么可以找到它的上一层进行修改。

使用到的依赖

//iconify icon图标库
compile 'com.joanzapata.iconify:android-iconify:2.2.2'
compile 'com.joanzapata.iconify:android-iconify-fontawesome:2.2.2'
// (v4.5)
compile 'com.joanzapata.iconify:android-iconify-entypo:2.2.2'
// (v3,2015)
compile 'com.joanzapata.iconify:android-iconify-typicons:2.2.2'
// (v2.0.7)
compile 'com.joanzapata.iconify:android-iconify-material:2.2.2'
// (v2.0.0)
compile 'com.joanzapata.iconify:android-iconify-material-community:2.2.2'
// (v1.4.57)
compile 'com.joanzapata.iconify:android-iconify-meteocons:2.2.2'
// (latest)
compile 'com.joanzapata.iconify:android-iconify-weathericons:2.2.2'
// (v2.0)
compile 'com.joanzapata.iconify:android-iconify-simplelineicons:2.2.2'
// (v1.0.0)
compile 'com.joanzapata.iconify:android-iconify-ionicons:2.2.2'
// (v2.0.1)
//AndroidUtilCode安卓工具类
compile 'com.blankj:utilcode:1.9.8'
//logger
compile 'com.orhanobut:logger:2.1.1'
//网络请求依赖
compile 'com.squareup.okio:okio:1.13.0'
compile 'com.squareup.okhttp3:okhttp:3.8.1'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-scalars:2.3.0'
//rx全家桶
compile 'io.reactivex.rxjava2:rxjava:2.1.6'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
//JSON依赖Android版
compile 'com.alibaba:fastjson:1.1.57.android'
//AVLoadIndicatorView 加载
compile 'com.wang.avi:library:2.1.3'
// fragmentation Fragment
compile 'me.yokeyword:fragmentation:1.1.8'
compile 'me.yokeyword:fragmentation-swipeback:1.1.8'
//ButterKnife依赖
compile 'com.jakewharton:butterknife:8.6.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
//Banner依赖
compile 'com.bigkoo:convenientbanner:2.0.5'
compile 'com.ToxicBakery.viewpager.transforms:view-pager-transforms:1.2.32@aar'
//RecyclerView依赖
compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.32'
//RecyclerView分割线
compile 'com.choices.divider:RecyclerView_Divider:1.0.0'
//StatusBarCompat
dependencies {
    compile('com.github.niorgai:StatusBarCompat:2.1.4', {
        exclude group: 'com.android.support'
    })
}
//Google AutoValue provided代表只在编译期间,产生作用,最后在源码中是不存在的
provided 'com.google.auto.value:auto-value:1.4.1'
annotationProcessor "com.google.auto.value:auto-value:1.4.1"
//图片加载
compile 'com.github.bumptech.glide:glide:4.0.0-RC0'
compile 'com.github.bumptech.glide:okhttp3-integration:4.0.0-RC0@aar'
annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0-RC0'
//circleimageview 圆形头像
compile 'de.hdodenhof:circleimageview:2.2.0'
//数据库依赖
compile 'org.greenrobot:greendao-generator:3.2.2'
compile 'org.greenrobot:greendao:3.2.2'
//图片裁剪
compile 'com.github.yalantis:ucrop:2.2.1-native'
//permissionsdispatcher
compile("com.github.hotchemi:permissionsdispatcher:3.0.1") {
    exclude module: "support-v13"
}
annotationProcessor "com.github.hotchemi:permissionsdispatcher-processor:3.0.1"
//富文本
compile 'com.zzhoujay.richtext:richtext:2.5.4'
//二维码扫描
compile 'me.dm7.barcodescanner:zbar:1.9.3'

最后求求你们给个star,长这么大一个star都没有,好心痛

image

(ps:这里我要说明一下,我的作品和某课网很相似的原因。因为做这个作品之初的时候,我刚好在一个技术交流群里面的附件里找到一份电商的源码,并且做了研究,我发现了其中精华的地方,包括网络请求和RecyclerView的Adapter以及其他优秀的地方,我也就拿来使用了。但是,那份源码,我拿到手是没有后台的。而且很多地方看不懂。如果看过我的源码的人都知道,我用的是MVP模式,而某课的不是。我添加了很多自己的想法与实践在里面。还请大佬们轻喷)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,248评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,681评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,443评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,475评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,458评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,185评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,451评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,112评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,609评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,083评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,163评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,803评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,357评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,357评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,590评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,636评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,925评论 2 344

推荐阅读更多精彩内容