《Kotlin从小白到大牛》第28章:项目实战1:开发PetStore宠物商店项目

第28章 项目实战1:开发PetStore宠物商店项目

前面学习的Kotlin知识只有通过项目贯穿起来,才能将书本中知识变成自己的。通过项目实战读者能够了解软件开发流程,了解所学知识在实际项目中使用的情况,哪些是重点的,哪些是了解的。
本章介绍通过Kotlin语言实现的PetStore宠物商店项目,所涉及的知识点:Kotlin面向对象、Lambda表达式、Swing、Exposed框架和数据库相关等知识,其中还会用到方方面面的Kotlin基础知识。

28.1 系统分析与设计

本节对PetStore宠物商店项目进行分析和设计,其中设计过程包括原型设计、数据库设计、架构设计和系统设计。

28.1.1 项目概述
PetStore是Sun(现在Oracle)公司为了演示自己的Java
EE技术,而编写的一个基于Web宠物店项目,如图28-1所示为项目启动页面,项目介绍网站是http://www.oracle.com/technetwork/Kotlin/index-136650.html。
PetStore是典型的电子商务项目,是现在很多电商平台的雏形。技术方面主要是Java EE技术,用户界面采用Java Web介绍实现。但本书介绍Kotlin语言,不介绍Java Web技术,所以本章的PetStore项目用户界面采用Kotlin + Java Swing技术实现。
在这里插入图片描述
28.1.2 需求分析
PetStore宠物商店项目主要功能如下:
用户登录
查询商品
添加商品到购物车
查看购物车
下订单
查看订单
采用用例分析函数描述用例图如图28-2所示。
在这里插入图片描述
28.1.3 原型设计
原型设计草图对于开发人员、设计人员、测试人员、UI设计人员以及用户都是非常重要的。PetStore宠物商店项目原型设计图如图28-3所示。
在这里插入图片描述
图28-3 PetStore宠物商店项目原型设计图

28.1.4 数据库设计
Sun提供的PetStore宠物商店项目数据库设计比较复杂,根据如图28-2的用例图重新设计数据库,数据库设计模型如图28-4所示。
在这里插入图片描述
数据库设计模型中各个表说明如下:
1.用户表
用户表(英文名accounts)是PetStore宠物商店的注册用户,用户Id(英文名userid)是主键,用户表结构如表28-1所示。
在这里插入图片描述
2.商品表
商品表(英文名products)是PetStore宠物商店所销售的商品(宠物),商品Id(英文名productid)是主键,商品表结构如表28-2所示。
在这里插入图片描述
3.订单表
订单表(英文名orders)记录了用户每次购买商品所生成的订单信息,订单Id(英文名orderid)是主键,订单表结构如表28-3所示。
在这里插入图片描述
4. 订单明细表
订单表中不能描述其中有哪些商品,购买商品的数量,购买时商品的单价等信息,这些信息被记录在订单明细表中。订单明细表(英文名ordersdetails),记录了某个订单更加详细的详细,订单明细表主键是由orderid和productid两个字段联合而成,是一种联合主键,订单明细表结构如表28-4所示。
在这里插入图片描述
从图28-4所示的数据库设计模型中可以编写DDL(数据定义)语句[1],使用这些语句可以很方便地创建和维护数据库中的表结构。
[1] 数据定义语句,用于创建、删除和修改数据库对象,包括DROP、CREATE、ALTER、GRANT、REVOKE和TRUNCATE等语句。

28.1.5 架构设计
无论是复杂的企业级系统,还是手机上的应用,都应该有效地组织程序代码,进而能提高开发效率、降低开发成本,这就需要设计。而架构设计就是系统的“骨架”,它是源自于前人经验的总结和提炼,形式一种模式推而广之。但是遗憾的是本书的定位是初学者,并不是介绍架构设计方面的书。为了开发PetStore宠物商店项目需要,这里笔者给出最简单的架构设计结果。
世界著名软件设计大师Martin Fowler在他《企业应用架构模式》(英文名Patterns of Enterprise Application Architecture)一书中提到,为了有效地组织代码,一个系统应该分为三个基本层,如图28-5所示。“层”(Layer)是相似功能的类和接口的集合,“层”之间是松耦合的,“层”的内部是高内聚的。
在这里插入图片描述
o 表示层。用户与系统交互的组件集合。用户通过这一层向系统提交请求或发出指令,系统通过这一层接收用户请求或指令,待指令消化吸收后再调用下一层,接着将调用结果展现到这一层。表示层应该是轻薄的,不应该具有业务逻辑。
o 服务层。系统的核心业务处理层。负责接收表示层的指令和数据,待指令和数据消化吸收后,再进行组织业务逻辑的处理,并将结果返回给表示层。
o 数据持久层。数据持久层用于访问持久化数据,持久化数据可以是保存在数据库、文件、其他系统或者网络数据。根据不同的数据来源,数据持久层会采用不同的技术,例如:如果数据保存到数据库中,则使用JDBC技术;如果数据保存JSON文件在,则需要I/O流和JSON解码技术实现。
Martin Fowler分层架构设计看起来像一个多层“蛋糕”,蛋糕师们在制作多层“蛋糕”的时候先做下层再做上层,最后做顶层。没有下层就没有上层,这叫作“上层依赖于下层”。为了降低松耦度,层之间还需要定义接口,通过接口隔离实现细节,上层调用者用只关心接口,不关心下一层的实现细节。

Martin Fowler分层架构是基本形式,在具体实现项目设计时,可能有所增加,也可能有所减少。本章实现的PetStore宠物商店项目,由于简化了需求,逻辑比较简单,可以不需要服务层,表示层可以直接访问数据持久层,如图28-6所示,表示层采用Swing技术实现,数据持久层采用JDBC技术实现。
在这里插入图片描述
28.1.6 系统设计
系统设计是在具体架构下的设计实现,PetStore宠物商店项目主要分为表示层和数据数据持久层。下面分别介绍一下它们的具体实现。
1.数据持久层设计
数据持久层在具体实现时,会采用DAO(数据访问对象)设计模式,数据库中每一个数据表,对应一个DAO对象,每一个DAO对象中有访问数据表的CRUD四类操作。
如图28-7所示PetStore宠物商店项目的数据持久层类图,首先定义了4个DAO接口,这4个接口对应数据中4个表,接口定义的函数是对数据库表的CRUD操作。
在这里插入图片描述
2.表示层
主要使用Swing技术,每一个界面就是一个窗口对象。在表示层中各个窗口是依据原型设计而来的。PetStore宠物商店项目表示层类如图28-8所示,其中有三个窗口类,LoginFrame用户登录窗口、CartFrame购物车窗口和ProductListFrame商品列表窗口,它们有共同的父类MyFrame,MyFrame类是根据自己的项目情况进行的封装,从类图中可见CartFrame与ProductListFrame具有关联关系,CartFrame包含一个对ProductListFrame的引用。
另外,CartFrame与ProductListFrame会使用到表格,所以自定义了两个表模型CartTableModel和ProductTableModel。
在这里插入图片描述

28.2 任务1:创建数据库

在设计完成之后,在编写Kotlin代码之前,应该创建数据库。
28.2.1 迭代1.1:安装和配置MySQL数据库
首先应该为开发该项目,准备好数据库。本书推荐使用MySQL数据库,如果没有安装MySQL数据库,可以参考25.1.1节安装MySQL数据库。

28.2.1 迭代1.2:编写数据库DDL脚本
按照图28-4所示的数据库设计模型编写数据库DDL脚本。当然,也可以通过一些工具生成DDL脚本,然后把这个脚本放在数据库中执行

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值