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

一、软件架构风格

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

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

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

具体设计如下:

二、 系统概念原型:

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

1、分解视图

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

2、依赖视图

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

3、泛化视图

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

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

4、执行视图

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

5、实现视图

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

本项目的目录如下:

api

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

common

common主要是一些基础的ORM类

distributor

distributor是发布者模块

service

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

user

user是抽奖用户模块

admin

管理者模块

ui

web界面

6、部署视图

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

7、工作分配视图

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

三、设计模式

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

四、数据库设计

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

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

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

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

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

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

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

前端:使用vue等框架。

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

简要说明一下运作内容:

抽奖活动的发布者:

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

用户:

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

管理者:

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

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

  1. 抽奖活动mysql表设计_购物商城数据库设计-商品表设计

    大家好,今天我们来设计一下购物商城的商品表. 我们的目标是表结构能够满足下面这张图的搜索: 在设计表之前,我们先来了解下商品中的两个概念:SPU和SKU SPU SPU(Standard Produc ...

  2. 抽奖活动mysql表设计_中奖数据表设计方案

    开奖表 id,开奖日期,开奖起始号,开奖结束号 奖项表 id,开奖表id,奖品名称,中奖起始号,中奖结束号,开奖数量,已中奖数量,添加时间,添加人 开奖表 id,奖项表id,用户名称,是否中奖,中奖号 ...

  3. 下载行政区划mysql表设计_行政区划数据数据库的设计(脚本)

    /************************************************************* Author:   LzmTW(水如烟) Create date: 200 ...

  4. feed mysql表设计_关于FriendFeed的MySql SchemaLess设计的问题

    这很简单 – 也许比你想象的要简单. 存储博客实体时,您当然要插入主实体表.博客是这样的: CREATE TABLE entities ( id INT AUTO_INCREMENT PRIMARY ...

  5. 消息聊天系统MySQL表设计_聊天系统-数据库设计

    //常用的redis命令 CONFIG SET requirepass "mypass" //Hashmap hset [key] [field] value] hget [key ...

  6. feed mysql表设计_微博系统动态feed数据库设计。

    推方式 推方式,是发生在用户触发行为(发布新的动态,关注某个人,点赞)的时候.在触发时,用户的自身行为会记录到对应的行为表中,其次用户的行为也会记录到自己的粉丝对应动态表中. 这里写图片描述 用户A发 ...

  7. 考试系统mysql数据库设计_驾校理论考试系统之数据库设计一

    应用开发工具:Microsoft Visual Studio 2010 旗舰版 - 简体中文 sp1-- Microsoft Visual C# 2010 应用程序:文档处理:Microsoft Of ...

  8. 考试系统mysql数据库设计_《在线考试系统数据库设计与实现》.doc

    网上测试系统 PAGE28 / NUMPAGES29 西南财经大学 Southwestern University of Finance and Economics 课程实验报告 课程名称: 数据库 ...

  9. 网络云盘项目——Redis部署、MySQL部署、MySQL表设计

    一.本文目的 本项目分为6篇博客文章完成: 1.项目总体介绍:https://blog.csdn.net/qq_41453285/article/details/107871393. 2.Redis部 ...

  10. mysql 评论回复表设计_【数据库】评论回复表设计

    一般系统发展到一定时候,就会需要加上评论功能.评论也会有很多形式,不同形式的评论展示表的设计也不一样.这里介绍几种比较常见的评论. 1.一问一答 张三:文章写的不错. 作者 回复 张三:谢谢你的认可 ...

最新文章

  1. 配置hadoop集群,完全分布式模式
  2. JSP自定义标签开发入门
  3. About Me - 关于
  4. 利用等积变换巧解三角形面积问题
  5. java怎么兼容switch_java – Switch语句给出了不兼容类型错误
  6. C语言 *** stack smashing detected *** 问题的解决
  7. AI 是否会取代计算机程序员
  8. 点击startup.bat启动tomcat出现乱码
  9. 注册cn域名应该注意些什么
  10. wget mirror
  11. Sql基本语句增删改查
  12. LORA 网关上电后对应配置 以及常用的AT指令
  13. CDA学习笔记-指标
  14. IIS部署添加网站发布网站
  15. html文件用excel打开乱码,如何解决IE打开Word、Excel乱码问题
  16. 边境的悍匪—机器学习实战:第四章 训练模型
  17. idea spring boot 修改html等不重启即时生效
  18. deepin 安装vscode
  19. 计算机的创新知识,创新高中计算机知识学习的策略分析
  20. Paper:自动驾驶领域SAE标准之《道路机动车辆驾驶自动化系统相关术语的分类和定义》官方英文原文翻译与解读(二)

热门文章

  1. 一次贴近实战的CTF比赛(cookie欺骗、php函数、Tomcat漏洞、注入、逆向等)
  2. BIN文件和HEX文件差异
  3. 面对不稳定的百度网盘离线下载,这些备用方案可以帮你应急
  4. 图文并茂地带你了解kafka分区Rebalance机制
  5. 全自动解密解码神器 — Ciphey
  6. ACER 4741G 笔记本刷1.31版bios黑屏,救砖处理
  7. dll反编译(dll反编译工具)
  8. 扒视频/音效素材的方法
  9. 路由与交换技术笔记(eNSP)
  10. Linux编译安装cmake源码