抽奖活动mysql表设计_抽奖项目的系统设计方案

我的是一个抽奖的工程实践项目,一个项目不管大小,设计需先行,所以本文是着重于大的架构风格,从各种视图来描述改项目,最后从具体的工程结构的实现和技术采用作为对架构的印证。

一、软件架构风格

它是对软件整体从最大的颗粒度上描绘整个的结构与特征,它类似于建筑的框架,是钢构的还是水泥浇灌的,这影响整个工程的质量与实现。

本抽奖系统采用的是数据仓库风格。在仓库风格中,有两种不同的构件:中央数据结构说明当前状态,独立构件在中央数据存贮上执行,仓库与外构件间的相互作用在系统中会有大的变化。按控制策略的选取分类,可以产生两个主要的子类。若输人流中某类时间触发进程执行的选择,则仓库是传统型数据库;另一方面,若中央数据结构的当前状态触发进程执行的选择,则仓库是黑板系统。

本抽奖系统自然是传统的数据库风格:

抽奖活动mysql表设计_抽奖项目的系统设计方案_第1张图片

具体设计如下:

抽奖活动mysql表设计_抽奖项目的系统设计方案_第2张图片

二、 系统概念原型:

本文打算以分解视图、依赖视图、泛化视图、执行视图、实现视图(代码目录结构)、部署视图、工作分配视图描述该工程

1、分解视图

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

抽奖活动mysql表设计_抽奖项目的系统设计方案_第3张图片

2、依赖视图

依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。 依赖视图在项目计划中有比较典型的应用。比如它能帮助我们找到没有依赖关系的软件模块或子系统,以便独立开发和测试,同时进一步根据依赖关系确定开发和测试软件模块的先后次序。 依赖视图在项目的变更和维护中也很有价值。比如它能有效帮助我们理清一个软件模块的变更对其他软件模块带来影响范围。

抽奖活动mysql表设计_抽奖项目的系统设计方案_第4张图片

3、泛化视图

泛化视图展现了软件模块之间的一般化或具体化的关系,典型的例子就是面向对象分析和设计方法中类之间的继承关系。值得注意的是,采用对象组合替代继承关系,并不会改变类之间的泛化特征。因此泛化是指软件模块之间的一般化或具体化的关系,不能局限于继承概念的应用。 泛化视图有助于描述软件的抽象层次,从而便于软件的扩展和维护。比如通过对象组合或继承很容易形成新的软件模块与原有的软件架构兼容。

本系统组件之间比较独立,没有明显的组合和继承关系,不过用户和发布者与抽奖引擎可能存在一定意义上的组合关系

抽奖活动mysql表设计_抽奖项目的系统设计方案_第5张图片

4、执行视图

执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。 执行实体可以最终分解到软件的基本元素和软件的基本结构,因而与软件代码具有比较直接的映射关系。在设计与实现过程中,我们一般将执行视图转换为伪代码之后,再进一步转换为实现代码。

抽奖活动mysql表设计_抽奖项目的系统设计方案_第6张图片

5、实现视图

实现视图是描述软件架构与源文件之间的映射关系。比如软件架构的静态结构以包图或设计类图的方式来描述,但是这些包和类都是在哪些目录的哪些源文件中具体实现的呢?一般我们通过目录和源文件的命名来对应软件架构中的包、类等静态结构单元,这样典型的实现视图就可以由软件项目的源文件目录树来呈现。

本项目的目录如下:

api

api主要是user和distributor通过RPC调用的暴露的接口

抽奖活动mysql表设计_抽奖项目的系统设计方案_第7张图片

common

common主要是一些基础的ORM类

抽奖活动mysql表设计_抽奖项目的系统设计方案_第8张图片

distributor

distributor是发布者模块

抽奖活动mysql表设计_抽奖项目的系统设计方案_第9张图片

service

service是抽奖服务模块,里面主要是抽奖逻辑,供给user和distributor远程调用

抽奖活动mysql表设计_抽奖项目的系统设计方案_第10张图片

user

user是抽奖用户模块

抽奖活动mysql表设计_抽奖项目的系统设计方案_第11张图片

admin

管理者模块

抽奖活动mysql表设计_抽奖项目的系统设计方案_第12张图片

ui

web界面

抽奖活动mysql表设计_抽奖项目的系统设计方案_第13张图片

6、部署视图

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

抽奖活动mysql表设计_抽奖项目的系统设计方案_第14张图片

7、工作分配视图

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

抽奖活动mysql表设计_抽奖项目的系统设计方案_第15张图片

三、设计模式

本系统也用到了一些设计模式,比如对于不同的抽奖类型,抽奖的算法运用是采用策略模式,虽然还没有完全设计好,但大致意思可以用以下的UML图说明:

抽奖活动mysql表设计_抽奖项目的系统设计方案_第16张图片

四、数据库设计

数据库设计的核心可用如下的逻辑视图说明:

抽奖活动mysql表设计_抽奖项目的系统设计方案_第17张图片

五、运行环境和技术选型说明

运行环境:在多个linux服务器上运行

语言:使用java,java对于web,高并发,分布式开发比较成熟,也有很多高可用的框架。

数据库:基础的采用mysql,高性能缓存采用Redis存储。

框架:使用springboot开发各个模块;使用Dubbo+Zookeeper开发分布式系统;shiro作为安全机制;elasticsearch作为搜索框架。

中间件:为了高并发场景,采用kafka MQ,它具有分布式特点,支持的并发量较高。

前端:使用vue等框架。

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

简要说明一下运作内容:

抽奖活动的发布者:

查看抽奖活动,创建抽奖活动,发布活动,在抽奖活动的过程中,还可以修改活动规则,内容,奖品数量等;

用户:

浏览抽奖活动,参与抽奖活动,查看是否中奖,得到中奖通知,填写个人信息等;

管理者:

可以查看所有的信息,对不符合规定的抽奖行为,活动,予以警告或禁止。

你可能感兴趣的:(抽奖活动mysql表设计)