2021最新java一个工程实践项目的完整软件系统设计方案

作者 : admin 本文共5166个字,预计阅读时间需要13分钟 发布时间: 共32人阅读

一个工程实践项目的完整软件系统设计方案

1 前言

本文主要是针对一个留学生信息管理与分析系统的分析与总结,主要阐述项目的完整设计方案和一些软件结构特点,并采用不同的视图来描述项目的软件系统概念原型。

工程实践项目介绍:工程实践是一个关于留学生信息管理与分析的平台。该系统是为用户提供有关留学服务信息的双边平台,管理人员定期维护系统,学生可以通过该系统搜索学校相关信息,并根据所提供的自身信息获得相应的留学建议。留学信息管理与分析系统可以针对不同用户,通过多种因素的综合分析,给出科学的建议,给用户合适的择校建议,让用户更好的选择心仪的海外高校。主要是为海外留学的人提供一些指导和推荐作用。

2 软件设计方案总述

一个良好的软件必然是经过好的软件设计,并不断重构、迭代的,以具有好的性能和可用性。那么,怎样才是一个好的软件设计呢?

软件设计从大的方面来说,有软件架构风格与策略的不同,从具体实现方面来说,有设计模式的不同,从底层来说,数据的存取以及语言的实现也不一样。只有采取最适合项目的软件设计方案,综合性能、成本、开发效益、可用性,才能获得最好的软件设计效果。

软件架构风格有很多,如分层架构、典型的MVC架构和MVVM架构、管道-过滤器、客户端-服务、P2P(如区域链)、发布订阅风格、CRUD、层次化架构等;典型的设计模式有工厂模式、单例模式、装饰模式、代理模式、外观模式、享元模式等;典型的软件架构的描述方法视图,比如分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图等。

这些软件架构风格和设计模式并没有优劣之分,只有适不适合之说。因此,我们要采取最适合本项目的架构风格和设计模式,以达到收益的最大化。

3 软件架构风格

本项目是一个多用户的系统,分为普通用户和超级管理员,为了软件设计的合理性、主流性、易用性、维护性考虑,此项目采取B/S架构,即browser/server架构,此架构最适合此项目的开发。

B/S(Browser/Server)架构,即浏览器/服务器架构,是在C/S(Client/Service,客户机/服务器)模式的基础上发展起来的一种体系结构,在开发Web应用时有明显的技术优势。因为在C/S模式下,用户使用应用时需要下载并安装客户端程序,其中同时包含了业务逻辑的实现和界面显示,由服务器端提供对数据访问的处理功能。而在B/S模式下,应用程序的业务逻辑实现和数据处理全部由服务器端提供,用户只需依靠浏览器作为界面显示便可使用,非常轻量快捷。

2021最新java一个工程实践项目的完整软件系统设计方案插图

 

 

设计模式

采用设计模式的目的就是为了软件的重用,因此采用关注点分离的思想,区分软件中变化的部分和不变的部分,在不变的部分使用设计模式,以提高软件的重用性和可维护性。

  此项目采用面向对象的思想,因此不可避免的采用多态的技术,因此也不可避免的采用模板方法模式和策略模式。为了安全的考虑,我们在权限控制模块采取代理模式,进行用户审计,防止用户进行越权访问;采用外观模式,进一步简化浏览器的业务逻辑;采用适配器模式,来适应普通用户和管理者接口的不适配。

5 视图及目录结构

  5.1 分解视图

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

根据对留学生信息管理系统的分析,此系统可以分解成五大功能模块,画出分解视图如下:

2021最新java一个工程实践项目的完整软件系统设计方案插图(1)

5.2 依赖视图

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

依赖是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖。在代码上主要表现为局部变量、方法的参数或者对静态方法的调用。

根据分解视图的五大模块,我们可以把握其中模块之间的关系,通过UML类图,我们可以画出相应的依赖视图:

2021最新java一个工程实践项目的完整软件系统设计方案插图(2)

5.3 泛化视图

  首先我们要明确一点就是,泛化不同于继承,应该大于继承。不要一提起泛化就想到继承,这是不准确的。继承关系只是面向对象分析和设计方法中类之间的典型例子。值得注意的是,采用对象组合替代继承关系,并不会改变类之间的泛化特征,因此泛化是指软件模块之间的一般化或具体化的关系,不能局限于继承概念的 应用。

泛化视图展现了软件模块之间的一般化或具体化的关系,有助于描述软件的抽象层次,从而便于软件的扩展和维护。比如通过对象组合或继承很容易形成新的软件模块与原有的软件架构兼容。

基于以上理解,我们可以简单重构一下,同样通过UML类图,画出此项目的泛化视图:

2021最新java一个工程实践项目的完整软件系统设计方案插图(3)

5.4 执行视图

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

执行实体可以最终分解到软件的基本元素和软件的基本结构,因而与软件代码具有比较直接的映射关系。在设计与实现过程中,我们一般将执行视图转换为伪代码之后,再进一步转换为实现代码。

因此,执行视图其实表现的是系统中间比较动态的那一部分。鉴于此,我们可以通过UML的流程图来表示此项目的执行视图:

2021最新java一个工程实践项目的完整软件系统设计方案插图(4)

5.5 实现视图

  实现视图是描述软件架构和源文件之间的映射关系。比如软件架构的静态结构以包图或设计类图的方式来描述,但是这些包和类都是在哪些目录的哪些源文件中具体实现的呢?一般我们通过目录和源文件的命名来对应软件架构中的包、类等静态结构单元,这样典型的实现视图可以由软件项目的源文件目录树来呈现。实现视图有助于码农在海量源代码文件中找到具体的某个软件单元的实现。实现视图与软件架构的静态结构之间映射关系越是对应的一致性高,越是有利于软件的维护,因此实现视图是一种非常关键的架构视图。

根据此项目的开发,我们可以给出源代码的目录文件结构,即此项目的实现视图:

2021最新java一个工程实践项目的完整软件系统设计方案插图(5)

 

 

2021最新java一个工程实践项目的完整软件系统设计方案插图(6)

 

2021最新java一个工程实践项目的完整软件系统设计方案插图(7)

 

5.6 部署视图

  部署视图是将执行实体和计算机资源建立映射关系。这里的执行实体的粒度要与所部署的计算机资源相匹配,比如以进程作为执行实体,那么对应的计算机资源就是主机,这时应该描述进程对应主机所组成的网络拓扑结构,这样可以清晰地呈现进程间的网络通信和部署环境的网络结构特点。当然也可以用细粒度的执行实体对应处理器、存储器等。部署视图有助于设计人员分析一个设计的质量属性,比如软件处理网络高并发的能力、软件对处理器的计算需求等。

对应于此项目,我们可以采取UML的部署图来描述其部署视图:

2021最新java一个工程实践项目的完整软件系统设计方案插图(8)

5.7 工作分配视图

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

在这里,我们给出此项目的大致工作分配视图:

2021最新java一个工程实践项目的完整软件系统设计方案插图(9)

 

6 数据库设计

  数据库采用当下流行的MySQL数据库,使用Redis进行数据缓存,提高可用性。

根据之前对项目进行的数据建模和分析,大致的可以得出此系统的五个类,对应五张表,我们可以新建一个analysis数据库,在数据库里新建五张表,这里把相应的表结构的设计列出来:

A)用户信息表

用户信息表存放所有用户的账号和密码等重要信息,用于用户的注册和登录。其他信息则与论坛或其他个人信息关联,包括性别、头像、成绩、意向学校或收藏等,可为空,后续进行详细设计。使用拦截器,未登录不能访问论坛与院校详情。

Id 账号 密码 昵称 注册时间 其他……
           

 

B)管理员信息表

后台管理人员的信息。

Id 账号 密码 登录时间 登录ip
         

 

C)学校信息表

学校信息表主要记录学校的一些关键信息如名称、专业设置等。其他例如录取率、申请材料等在其他信息中进行详细设计。

Id 中英校名 国家地区 QS排名 学校介绍 专业设置 其他……
             

 

D)专业信息表

专业信息表包括全球主流专业的详细信息。后续进行详细设计以增强信息检索能力。

Id 名称 学校排名 详细信息……
       

 

E)文章信息表

论坛的首要的功能是实现文章的发布与留言,文章信息表中的热度包括浏览量、点赞数和转发数,留言列表将采用单独的表进行映射。

Id 作者 发布时间 热度 关键词 文章内容 留言列表
             

 

F)中间结果表

主要是起到缓存的作用,引入中间关联表。

Id 学校ID 专业ID 详细信息……
       

 

 

数据结构方面的设计我们采取Redis缓存和rabbitHQ队列,具体的数据结构已经通过springboot技术进行封装,我们这里不再叙述。

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

  本项目采用JavaWeb应用开发技术,基于Vue+Spring Boot实现一个留学信息管理与分析系统,旨在为用户提供完善的信息检索功能和建议与分析的推荐功能。前端部分采用HTML、CSS、JavaScript等技术实现用户界面的开发,并采用Vue+Vue-resource+Vue-cookie。后台服务器端基于Java语言进行开发,核心部分采用SpringBoot技术栈,ORM则选择myBatis框架。数据库管理方面使用轻量级MySQL数据库和Redis缓存技术,最终采用ECS云服务器实现系统的发布。使用RESTFul进行接口设计、使用前后端分离开发。后续则实现信息挖掘和可视化,以实现更强大的分析功能,可能使用Scrapy框架等。

前端开发平台:Visual Studio Code

后台开发平台:Intellij IDEA

数据库:MySQL & Redis

服务器:云服务器(ECS)

8 概念模型的核心工作机制 

概念是人对能代表某种事物或发展过程的特点及意义所形成的思维结论,概念原型是一种虚拟化的、理想化的软件产品形式。也就是说,概念原型 = 用例 + 数据模型。

软件架构代表了软件系统的整体设计结构,它应该是所有这些视图的集合。但我们不会将不同角度的这些视图整合起来,因为不便于阅读和更新。不过我们会有意识地将不同角度的视图之间的映射关系和重叠部分了然于胸,从而深刻理解软件架构内在的一致性和完整性,这就是系统概念原型。

因此基于以上分析和建模,我们就可以总结出此项目的概念原型,同时对此概念模型的工作过程进行分析。

 

整个概念模型的工作过程为:

用户这个用例向系统输入条件和数据,系统进行分析和筛选为专业、学校和文章几种信息,系统获取到用户的信息,进行算法的分析和提取,并根据每一个独立的用户进行个性化推荐,把最适合用户的学校和专业推荐给用户。用户如果对结果不满意,还可以查看学校和专业的论坛,通过查看别人的帖子进行筛选,重新进行信息检索,直到获取到满意的结果。这就是一次普通用户的业务过程。比如我是张三,我今年软件工程专业毕业,我想去美国留学,我输入自己的论文、科研成果以及GPA,系统会自动推荐适合我的学校,比如哈佛大学,但是我可能并不太想去哈佛,于是去搜一下对应的论坛,发现麻省理工更适合我,于是把简历发给了麻省理工,留学分析这个过程完毕。
管理员登录之后,进入属于自己的界面,管理员进行增删改查等操作之后,系统进行处理这些数据,进行更新学校、专业、文章等表结构,并把操作之后的结果返回给管理员,完成了一次业务过程。比如管理员登录系统之后,可以进行学校信息的更新,专业的更新,对不符合的论坛或者用户进行删除操作等。如果某个专业或者学校大家都说好,那么我可以设置一下推荐权级,让用户搜索的时候,优先看到此学校或者专业,节省用户的时间。管理员界面主要是个后台监管界面,可以对系统进行一定的干预,以获得更好的用户体验。

9 总结

  本篇博客主要给出了留学分析与管理系统的完整设计方案,给出了其蕴涵的软件结构特点和概念原型(各种视图),并提供了运行环境和技术选型,最后结合实例给出了该系统概念原型的核心工作机制。希望在进行软件设计阶段予以读者一定的启发作用,更好的运用软件工程的原理进行软件开发。

10 参考资料

  1 Software Engineering:Theory and Practice(Fourth Edition),ShariLawrence Pfleeger,Joanne M.Atlee


滴石it网-Java学习中高级和架构师教程_Java企业级开发项目实战下载 » 2021最新java一个工程实践项目的完整软件系统设计方案

常见问题FAQ

发表回复

开通VIP 享更多特权,建议使用QQ登录