基于移动终端的马匹竞拍APP 设计与实现

2022-05-24 11:44李雪婷
电子设计工程 2022年10期
关键词:序列化马匹保证金

李雪婷,杨 抒

(1.新疆农业大学计算机与信息工程学院,新疆乌鲁木齐 830000;2.成都大学 计算机学院,四川 成都 610106)

在“互联网+”的新形态下,智能移动终端飞速发展,信息技术已经彻底改变了传统的经济和金融市场结构,利用互联网购物逐渐成为一种重要的消费方式。不同电商网站之间的竞争日趋激烈,网上拍卖是电子商务的重要组成部分[1-3]。网上拍卖对于交易者来说,最为明显的优势就是可以突破时间及场所等自然因素的限制[4]。同时,拍卖者只要拥有想要拍卖的物品,可以随时随地地放在网站上进行拍卖,买家也可以购买世界各地的拍品,相比于传统拍卖,简化了竞拍规则,获得了用户的喜爱[5]。但仅仅使用网页端的线上拍卖平台很难真正提升用户参与拍卖的便捷性。随着移动互联网的迅速发展,越来越多的拍卖活动都以移动端APP 的方式进行。层出不穷的竞拍APP 主要针对艺术品及工艺品进行拍卖。大型活体动物的竞拍多以线下专业拍卖会的方式进行。新疆是我国传统马业强区,全区马存栏量居全国第一[6]。伴随着经济发展和社会需求的变化,新疆马产业呈现出明显的发展优势和巨大的发展潜力。为推进中国现代马业发展,促进国际交流合作,各方力量都在发挥积极的作用[7]。在此基础上,文中提出了一款能够在IOS 端及Android 端运行的马匹竞拍APP。利用移动端APP 用户群体庞大、功能强大等特点,提升用户参与竞拍的便捷性与积极性,进而增加参与同场竞拍人数,降低流拍率,并能够高效、及时地扩散马匹信息,提高马匹竞拍信息化水平,促进相关产业的发展。

1 总体设计

1.1 功能设计

通过实地调研并结合实际情况及竞拍业务逻辑的基本需求,利用应用程序的简单易用、适应移动设备等特点,设计了马匹竞拍APP 功能结构,如图1所示。

图1 功能结构图

由图1 可见,马匹竞拍APP 由即将竞拍、正在竞拍及竞拍结束马匹信息展示模块、马匹竞拍模块、订单管理模块、保证金管理模块及用户管理模块组成。利用应用已实现的功能,可将即将竞拍马匹、正在竞拍马匹及竞拍结束马匹的相关信息展示给用户。竞拍成功的用户可查看订单详细信息,竞拍失败的用户可查看参与竞拍时交纳保证金的当前状态。当前马匹竞拍APP 的功能设计能够满足用户随时随地参与马匹竞拍的需求。

1.2 软件架构设计

在开发Web 应用过程中,分为前后端不分离和前后端分离两种应用模式。前后端不分离是在前端请求动态页面时,把数据渲染成模版返回给前端,前端的效果由后端决定。这种模式耦合度较高,代码管理难度较大,应用维护麻烦。随着APP 的发展,在实际生产应用中APP 只需要从后端获取一份单纯的数据。当需要开发相同业务的网站和APP 时,如果不使用前后端分离模式,则后端代码需要分别为移动端和网页端进行开发,增加了工作量。在前后端分离模式中前端工程师负责前端页面的设计及开发,后端工程师负责数据库的设计、接口的开发及后台的管理。将前后端有效区分开来,极大地提高了开发效率。前后端分离模式中如需新增功能模块,只需在后端增加相应接口即可,较好地解决了前后端不分离模式中耦合度较高的问题。除此之外,只要前端代码遵循后端接口的调用规则,一套后端代码可以支持多种前端应用程序,极大地降低了开发成本[8]。马匹竞拍APP 采用前后端分离的应用模式,前端负责马匹竞拍APP 界面的渲染,后端返回前端所需要的数据,不用再控制前端的效果。后端开发的每个视图都称为一个接口,前端需通过调用接口来对数据进行增、删、改、查。选取这种模式不仅可以解决网页端和移动端的数据同步问题,还可以方便数据的管理,提升软件的可维护性。软件架构设计如图2 所示。

图2 软件架构设计图

1.3 技术选择

1.3.1 应用开发

这款应用的开发框架选用Flutter,开发语言选用Dart,开发工具选用Android Studio。相比其他跨平台框架,Flutter 框架的简单性使其能够快速运行。它的可定制性和可扩展性使其保持简单的同时拥有强大的功能。

1.3.2 服务器开发

随着前后端分离模式在应用开发中逐渐增多,服务器端的开发技术也层出不穷。这款应用服务器端的开发框架选用Django Rest Framework,开发语言选用Python,开发工具选用PyCharm。在编写接口时其内部帮开发人员提供了丰富的类视图及很多方便的组件,通过配置开发人员可以完成的序列化、分页、权限设置等操作,极大地提高了编程效率。

1.3.3 数据库开发

Postgre SQL 作为一个功能强大的开源数据库[9]。支持多种语言编程,拥有世界上最丰富的数据类型支持,因此选用Postgre SQL 作为这款应用的数据库。

2 关键技术

2.1 Flutter

Flutter是谷歌发布的一款跨平台开源的UI框架[10]。Flutter 不仅可以快速在IOS 和Android 上构建高质量的原生用户界面,还支持MAC OS、Windows、Linux 平台开发,并且是未来新操作系统Fuchsia 默认的开发套件[11]。Flutter 提供了丰富的组件、接口,可以与现有的代码一起工作,使得APP 能够在每一个终端快速上线。

2.2 Django Rest Framework

Django Rest Framework 是一款强大且灵活的构建网页API 的工具,可用最少的代码快速构建出一套可靠的API,简称DRF。DRF 最核心的模块是Model、Serializer、View、Authentication、Permissions[12]。Django Rest Framework 具有对开发人员友好的网络通用接口,具备权限管理、序列化等模块,同时支持ORM 和非ORM 数据源。采用功能性视图即可自定义所有通用接口,有强大的社区支持且应用广泛[13]。

2.3 Dart

Dart 是一种静态类型的安全语言。相比Java Script 弱类型语言来说,Dart 支持静态类型检测,在编译阶段可以获得更多编辑器提示词,可以在编译前发现部分类型的错误,排除潜在问题,极大增强了程序的可维护性[14]。

2.4 Python

Python 是一种面向对象的解释型计算机程序设计语言[15]。其应用范围很广,支持多种数据类型,拥有强大的第三方开源库[16]。由于它的多功能性,Python 已经成为最流行的编程语言之一[17]。

3 软件架构实现

3.1 数据库端的实现

数据库的设计是根据软件的需求设计出能够对数据资源进行统一管理,从而实现软件功能的基础设计[18]。根据马匹竞拍的业务逻辑、数据库的完整性及安全性等特征,设计出符合实际的马匹关联表,为服务端的实现奠定了基础。马匹竞拍APP 数据库内含有竞拍首页轮播图表、马匹信息表、竞拍详情表、竞拍表、订单详情表、买家订单表及支付信息表等数据库表,如表1 所示。

表1 马匹竞拍App数据库组织结构图

由表1 可知,竞拍首页轮播图表存储马匹竞拍APP 首页展示的轮播图;马匹信息表存储马匹的具体信息,如RFID 号、护照号、马名、马主、品种等数据;竞拍表存储马匹竞拍的相关信息,如起拍价、起止时间、加价幅度、延时周期等数据;竞拍详情表存储竞拍者、竞拍状态、竞拍信息、竞拍价格、竞拍时间等数据;买家订单表存储订单编号、竞拍人、保证金、成交价及佣金等数据;订单详情表存储订单的数量及单价等数据;支付信息表存储支付用户、支付类型、支付单标题、支付单总金额及支付状态等数据,其关系如图3 所示。

图3 数据库表关系

3.2 服务器端的实现

由于文中设计选用的开发模式为前后端分离模式,完成了后端数据库的开发后,建立数据库与前端的链接便成为该设计的重点之一。为了能够高效地开发API,提升与服务器的联动性,在开发设计API时遵守如下Restful 规范。

1)域名的编写:由于该设计开发的API 分类明确,不会进一步的扩张,所以将API部署在主域名下。

2)协议的选取:使用HTTPS 协议。

3)版本的控制:将API 的版本号放入URL,通过版本号来区分不同版本的接口,不同版本放在不同接口下,以此来提高系统信息的兼容性。

4)API 的命名:路径使用名词加负数。

5)返回数据的格式:Json。

6)信息的过滤:通过对参数的控制,指定返回记录的数量、返回记录的开始位置、返回页数及每页的记录数、返回结果排序的属性以及排序顺序和筛选条件,可以较好地解决记录数量大的问题,减缓服务器的压力。

7)数据操作类型的控制:没有按照Restful 规范写接口时,对数据的元操作CRUD(Create、Read、Update、Delete)分别要对应写出4 类接口来满足数据的请求。Restful 规范中,规定的请求方式与元操作CRUD 对应。GET 请求方式可实现资源的获取,POST 请求方式可实现资源的新增,PUT 请求方式可实现资源的更新,PATCH 请求方式可对资源进行部分更新,DELETE 请求方式可对资源进行删除。其中,GET 请求方式及POST 请求方式则可调用同一类接口。PUT 请求方式、PATCH 请求方式及DELETE 请求方式均需要根据数据库表的主键来更新,则需要传递主键,可写一类接口满足数据的调用。按照Restful 规范写接口时只需要两类接口即可满足需求,数据的获取只需根据请求方式来控制即可。

以马匹竞拍详情页数据接口为例,阐述该APP接口的开发过程如下:

1)获取完成数据库迁移操作的数据库表,从而获取数据模型类。

2)将数据模型类进行序列化与反序列化。创建ProductSerializer 类、DetailsSerializer 类并继承ModelSerializer 类,以实现Auction 表的序列化。由于product 字段是Auction 表的一个外键,因此需要先将Product 表进行序列化。在序列化Product 表时首先指定序列化模型的类Product,然后指定序列化模型类的属性,将要序列化的属性选择性的赋值给“fields”,此处“'__all__'”是将Product 表的所有属性都进行序列化。Product 表序列化后再将Product Serializer 类在DetailsSerializer 类中进行调用。将Product 字段进行序列化,从而完成Auction 表的序列化。代码如下:

3)视图类的编写。定义DetailsSerializerView 类并继承ModelViewSet 类,获取要序列化的Auction 表的所有对象,指定要使用的序列化类DetailsSerializer,则可实现对数据的增、删、改、查。除此之外,定义的get_queryset 函数,还可根据id 获取单条记录,实现数据的查询。代码如下:

5)将接口的Django app在setting.py中进行注册。

通过上述操作,即可完成马匹竞拍详情页数据接口的开发。启动服务器即可在Django Rest Framework 为开发人员提供的Web 可视化界面中查看接口返回的Json 数据,并且可对数据进行获取、创建、更新及删除操作。

3.3 应用端的实现

3.3.1 马匹信息展示模块

待拍卖、拍卖中及拍卖完成的马匹信息展示模块的设计能够使用户快速、及时、准确地了解拍卖马匹及拍卖完成马匹的所有详细竞拍信息。将竞拍马匹的芯片号、马匹名称、身高、体长、胸围、管围、出生年月、品种、烙号等信息简明扼要地呈现在用户眼前,用户可根据个人意愿参与竞拍。

3.3.2 马匹竞拍功能模块

该模块对竞拍时间段、起拍价、加价幅度、佣金金额、延时周期、保留价进行了设置,用于对马匹竞拍业务功能的实现。用户可点击正在拍卖详情展示界面的“竞拍”按钮,签订竞拍协议,交纳参与竞拍的保证金参与竞拍。参与竞拍的用户可在规定时间内根据个人意愿按规定的加价幅度或加价幅度的倍数进行竞拍。当竞拍成功后,保证金则作为付款金额及平台服务费的一部分,用户支付尾款即可完成这次竞拍。当竞拍失败后,保证金会退还给用户,结束这次竞拍。具体竞拍业务流程如图4所示。

图4 竞拍业务流程

3.3.3 保证金管理功能模块

在该模块中对马匹竞拍保证金进行了管理,用户可查看保证金的当前状态。竞拍成功之后保证金状态会显示为扣除状态,竞拍结算金额由竞拍金额减去保证金金额得出,并在订单详情页中显示。竞拍失败的用户可以查看保证金的退还状态。

3.3.4 订单管理功能模块

该模块实现了竞拍成功订单的生成、订单的显示及个人订单的管理功能。方便用户对个人订单的查看及管理。

3.3.5 用户管理功能模块

该模块实现了用户个人信息的设置及个人信息的展示。用户可以修改个人账户的基本信息,如密码、收货地址、联系方式等,还可对用户收藏的马匹信息及竞拍成功后订单的待付款、待发货、待收货、待评价等信息进行查看。除此之外,该模块的所有信息都与网页端的账户保持同步,用户可以对自己的个人信息进行便捷管理。

4 系统运行结果展示

该应用实现的主要功能包括马匹信息展示、马匹竞拍、保证金管理、订单管理以及用户管理。应用的主要功能界面如图5~8 所示。

图5 首页

图6 竞拍详情页

图7 我的竞拍页

图8 个人中心页

5 结束语

在对马匹竞拍业务逻辑充分调研的基础上完成需求分析,根据需求分析确定基于移动端马匹竞拍APP 的设计方案。根据新疆维吾尔自治区大力发展马产业的现状,完成了一款易扩展、易维护的IOS 端及Android 端马匹竞拍应用。相较于新疆昭苏西域马业传统马匹竞拍模式,用户不再需要前往拍卖会场,受到时间、地域的局限,改善了传统竞拍模式中存在的弊端,为交易双方在马匹竞拍过程中提供了很大程度上的便利,大大提升了竞拍效率,提高了人们对马匹竞拍的关注度,满足了人们的需求。

猜你喜欢
序列化马匹保证金
基于FlatBuffers的机车通信数据序列化方法应用研究
如何建构序列化阅读教学
某物资管理调度系统的数据序列化技术
盛装舞步竞赛马匹的设施和管理
马匹喝水
警惕出境游保证金陷阱
真正的动物保护:马匹专用“跑鞋”
五花八门的保证金到底能保证啥
安徽农民工工资保证金可差异化缴存
Java 反序列化漏洞研究