软件结构特点

软件架构风格和策略

本系统主要是对数据库进行操作,所以对于本系统的架构风格和策略采用CURD的比较适合。

CRUD 是创建(Create)、 读取(Read)、更新(Update)和删除(Delete)四种数据库持久化信息的基本操作的助记符,表示对于存储的信息可以进行这四种持久化操作。CRUD也代表了一种围绕中心化管理系统关键数据的软件架构风格。

设计模式

在本系统中,普通用户可以订阅某些其他的用户,当订阅的用户发布新的抽奖信息时,该用户应该能够收到抽奖信息更新的消息推送。很明显该需求存在一对多的关系,即一个发布者有多个订阅者,针对这一需求,考虑使用观察者模式。

观察者模式

意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。

实现:观察者模式使用三个类 Subject、Observer 和 Client。Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法。我们创建 Subject 类、Observer 抽象类和扩展了抽象类 Observer 的实体类。

软件系统概念原型

分解视图

分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdown structure)特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。

本文章采用按不同的功能模块图来对系统进行分解。将系统分解为用户导航系统、用户注册系统、普通用户系统、管理员系统。系统的功能模块图:

依赖视图

依赖视图展现了软件模块之间的依赖关系,如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。比如它能帮助我们找到没有依赖关系的软件模块或子系统,以便独立开发和测试,同时进一步根据依赖关系确定开发和测试软件模块的先后次序。

泛化视图

泛化视图展现了软件模块之间的一般化或具体化的关系,典型的例子就是面向对象分析和设计方法中类之间的继承关系。泛化视图有助于描述软件的抽象层次,从而便于软件的扩展和维护。比如通过对象组合或继承很容易形成新的软件模块与原有的软件架构兼容。

在本系统中,普通用户和管理员都是系统的用户,所以可以抽象出用户类,在该类中定义用户的类型,基于这一设计,系统的管理员注册模块和普通用户的注册模块可以抽象出注册模块,而管理员和普通用户的注册是这一模块的具体实现。同理,系统的登录模块同样的道理。下图是注册模块的泛化视图。

执行视图

执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。

该系统主要是抽奖,下面是该系统用户抽奖的时序图。

实现视图

实现视图是描述软件架构与源文件之间的映射关系,这样典型的实现视图就可以由软件项目的源文件目录树来呈现。

本系统的文件目录树如下图所示

目录解释:

目录

用途

src/main/java

Application /Library 的java源代码(再分package)

src/main/resources

Application/Library 的资源文件,如多字符集boundle,位图,配置文件等(单独建立conf等子目录)

src/main/webapps

Web 应用的网页,WEB-INF目录等所在

src/test/java

单元测试的源代码

src/test/resources

测试使用的资源文件,如集成测试脚本等

out

maven编译目录,包含中间过程文件和最终的工件(如jar)

pom.xml

Maven工程的配置文件,以此控制maven构建行为

对src/main/webapp目录做如下约定

目录

存放内容

css

存放.css格式文件(可再分目录)

images

存放图片,按产品、功能模块划分子目录

js

JavaScript文件(对象、函数库)

include

存放被包含的JS文件片段【注:JSP文件互相不要包含,通过模板/组件/标签库/BEAN实现重用】

resources

存放JSF组件、相关资源等

pages

网页目录(静态和动态网页,除index.jsp),按产品、功能模块划分子目录

WEB-INF

网站配置文件目录,存放WEB.XML等配置信息

WEB-INF/classes

未打包的项目编译代码,禁止手工修改。

WEB-INF/conf

存放struts,spring,hibernate,JSF等的配置文件

WEB-INF/lib

存放第三方JAR包,使用MAVEN构建时此目录禁止手动放入文件!

WEB-INF/pages

高安全性的网页目录,如登录信息维护等

部署视图

部署视图是将执行实体和计算机资源建立映射关系。这里的执行实体的粒度要与所部署的计算机资源相匹配,比如以进程作为执行实体那么对应的计算机资源就是主机,这时应该描述进程对应主机所组成的网络拓扑结构,这样可以清晰地呈现进程间的网络通信和部署环境的网络结构特点。当然也可以用细粒度的执行实体对应处理器、存储器等。

工作分配视图

工作分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源,甚至在项目计划阶段工作分配视图对于进度规划、项目评估和经费预算都能起到有益的作用。

本系统小组成员有4人,工作分配视图如图所示

核心数据库设计

数据库的E-R图如下图所示

软件系统运行环境和技术选型

运行环境:本系统的服务端在Linux服务器上运行,用户在自己本地计算机上的浏览器进行登录访问。

数据库:本系统采用MySQL数据库,该数据库在速度、可靠性、适应性上都是较好的选择。

开发语言:java,Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。对于Web开发有得天独厚的优势。

前端框架:Vue

后端框架:Springboot

分布式框架:Dubbo和Zookeeper

系统概念原型的核心工作机制

用户成功登录系统后,可以进行查看自己的信息,以及发布自己的抽奖,对于之前的抽奖在开奖后系统会推送是否中奖等信息。用户也可以浏览现有的抽奖,以及进行抽奖等操作。

管理员登录系统后,可以查看当前有多少已经提交的抽奖信息,经过审核后可以对该抽奖进行发布,如果没有通过审核,可以通知用户具体哪里违反规定。同时可以检测用户的状态,设置用户的抽奖权限,以及抽奖次数等操作。

mysql怎么设计抽奖表_抽奖系统设计方案相关推荐

  1. mysql售票系统设计文档_售票系统设计方案

    1.架构设计 1. 系统架构选型 从软件架构角度,本系统采用了MVC分层的设计思想,各层级只需要关注本身的设计,而不需要关注其他层级的内部细节,层与层之间定义了良好的交互方式.具体而言,本系统可以分为 ...

  2. mysql 数据库设计 纵表_数据库查询技巧以及横纵表

    1. 查询技巧 查询时先写出查询结构,将需要连接的表进行join on 连接好,最后再写出查询的数据 select from join on [where] group by 字段[order by ...

  3. mysql为何500w拆表_【mysql】MySQL 单表500W+数据,查询超时,如何优化呢?

    1.问题描述: MySQL 数据库,单表 `im_data_record`,查询超时(30s) 表结构如下图: 表索引如下图: 查询语句如下: SELECT `record_global_id`, ` ...

  4. MySQL数据库设计作业 ——《网上书店系统》数据库设计实验报告

    数据库设计作业--<网上书店系统>数据库设计 一.功能需求 普通用户:可以进行最基础的登陆操作,可浏览图书.按类别查询图书.查看 图书的详细信息,还可以注册成为会员. 会员:需要填写详细信 ...

  5. 如何删除mysql数据库里的表_删除mysql数据表如何操作

    MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TABLE table_na ...

  6. mysql设计积分兑换表_积分系统数据库表设计.docx

    积分系统数据库表设计 文件编号:JHDZ/SJ 密 级: 云上城积分功能数据库设计文档 项目名称:<云上城>项目代号:XXX版 本:V1.0编制单位:平台运营编制日期:2014-10-08 ...

  7. mysql视图和中间表_数据库设计中的14个技巧

    时 间:2006-09-15 00:00:00 作 者: 摘 要:数据库设计中的14个技巧 正 文: 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关 ...

  8. mysql收货地址表_企业内容管理系统-收货地址表 - 数据库设计 - 数据库表结构 - 果创云...

    -- 数据库大全:企业内容管理系统-收货地址表 -- 来源:YesApi.cn CREATE TABLE `yesapi_ey_shop_address` ( `id` bigint(20) unsi ...

  9. mysql架构设计书籍推荐_最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这...

    摘要: 冲区才用缓冲区,即SQL_CACHE:sort_buffer_size:排序缓冲区.3)分库分表因为数据库压力过大,首先一个问题就是高峰期系统性能可能会降低,因为数据库负载过高对性能会有影响. ...

最新文章

  1. 10 行 Python 代码自动清理电脑重复文件,解放双手!
  2. mac hdmi 不能调整音量_搭配这几个软件,你的 AirPods 在安卓、Mac 上会更好用
  3. 通过pxe远程安装linux,通过PXE远程安装多台Linux系统
  4. 操作系统课设之虚拟内存页面置换算法的模拟与实现
  5. 两个vlan如何互通_网络交换机VLAN的常识与划分方法,你知道吗?
  6. 优先队列之Leetcode 23合并K个有序链表
  7. webview 禁用横竖屏切换_X5内核WebView横屏切换崩溃
  8. 信息技术是一把双刃剑,如何掌控好这柄剑?
  9. javascript动态字母
  10. mysql之高性能索引
  11. RAR Extractor Max for Mac(解压缩软件)
  12. 你并不在意的 HTTPS 证书吊销机制,或许会给你造成灾难性安全问题!
  13. js动态计算移动端rem
  14. ROBOCOPY命令
  15. CPU检测软件CPU-Z的下载使用
  16. 【原型图设计工具】墨刀使用说明
  17. 【解决方案】IPv6的445端口被运营商封禁,导致无法正常使用Windows共享文件夹
  18. 芯邦主控的U盘量产教程
  19. 经典软件典范龙卷风网络收音机功能详解
  20. pip 生成 requirement.txt 文件

热门文章

  1. python面向对象编程从零开始_Python面向对象编程从零开始(4)—— 小姐姐请客下篇
  2. 使用Gradle引入mysql依赖
  3. 关于 蓝桥杯 打印六芒星 的 另类方法
  4. 水果店的问题和风险,新手开水果店会遇到什么问题
  5. PHP:ThinkPHP使用PHPMailer发送html邮件
  6. ACCESS数据库操作教程
  7. Linux 忘记密码怎么办,CentOS和Ubuntu重置密码方法
  8. Android Activity详解
  9. Dinic Algorithm
  10. 【SwiftUI模块】0058、 SwiftUI设计时尚的漫画应用程序UI[用户界面]