项目架构分析与设计
这篇博客在作者对Spring和SpringBoot框架有了更多的了解之后写下,是对我们这个项目业务的一个具体分析和系统设计。
目录
写在前面
这一系列博客是作者对其参与的山东大学创新实训项目过程的简单记录,主要记录作者的思路、进度以及部份开会中的观点,作者负责的内容主要是后端平台和项目框架的搭建。作者想既然发布出来了就希望对各位看官自己的项目开发有所启发,对于学弟学妹们也有所帮助。另外作者水平有限,如有不妥欢迎批评讨论。
需求分析
系统开发的意义
见系统整体规划文档。
系统概述
我们的项目是一个主要面向软件学院同学的就业信息发布和推荐的平台。通过爬取学校几个分散的发布就业招聘信息的网站来获取上面经过学校审核过的和计算机软件相关的就业招聘信息,经过系统的处理之后以更加集中和结构化的形式进行发布。并为注册用户提供个性化岗位推荐服务,方法大致是通过用户填写的求职意向、擅长领域和用户在系统中的行为数据对系统中所存储的就业信息进行协同过滤得到。
就业信息来源:时空视点、山东大学就业创业指导中心等。
系统功能需求
功能概述
作者以用户视角将系统的功能分为
- 注册、登录
- 设置修改个人信息
- 招聘大厅
- 通过关键词搜索查询相关招聘信息
- 查看详细招聘信息
- 根据用户情况进行岗位推荐
- 根据浏览内容进行岗位推荐
- 收藏招聘信息
下面对功能进行详细定义
1. 注册、登录
首先是熟悉的注册、登录,这个部份的目的是为了实现根据用户情况的岗位推荐服务,而对于其他方面的功能没有影响。
注册中要求用户提供学号作为用户id,因为我们的系统是面向我们自己学院的;另外提供昵称(姓名)、性别、年龄 、专业、方向、擅长领域、家乡城市、现居住地等相关信息以便进行职位推荐。设置密码用于登录。
- 对用户信息的明确要求
登录时通过学号和密码的组合进行登录
- 传输时是否需要进行加密处理,处理到什么程度
- 提供怎么样的错误提示
登录注册操作的至少入口应该在每个用户尝试使用个性化推荐功能时提供,进一步考虑在每个未登录状态的界面提供。
2. 设置修改个人信息
用户应该可以在使用过程中任意非id的信息,比如求职意向、擅长领域等。
3. 招聘大厅
招聘大厅就是进入网站的首页部份。提供招聘信息公告栏,按照时间将招聘信息顺序显示;提供按不同类别进行信息索引的招聘黄页;提供重点信息的轮播;为已登录用户提供个性化的招聘信息推荐。
- 详细讨论主页布局和模块名称
4. 通过关键词搜索查询相关招聘信息
用户不仅可以从招聘大厅中找到相关招聘信息,还应该能够通过关键词,如公司名、公司所在城市、岗位、岗位要求等找到自己想要的招聘信息。
- 讨论需要和能够保证的关键词类型,考虑实现难度
5. 查看详细招聘信息
即能在一个网页中查看完整的招聘信息。包括
标题、起止日期、应聘网址、简历投递邮箱、所需人数、公司名、公司简介、招聘对象要求、岗位名、岗位要求、地点、薪资、福利以及特殊的要求(语种,专业要求)
以上信息对应数据库所存储的字段。
用户可以从招聘大厅、关键词查询结果和直接链接访问的方式访问到详细招聘信息。
6. 根据用户情况进行岗位推荐
根据用户情况为用户推荐适合他的岗位,其中用户情况包括用户提供的个人信息和用户在网站中留下的行为数据。
- 作者对这方面不熟悉,还需要和负责的同学交流
7. 根据浏览内容进行岗位推荐
根据当前访问的网页所展示的岗位进行与其相关的岗位。所以理所当然应该和某一个详细招聘信息同时出现在一个网页中。
其他系统功能
其他系统功能表示为了实现用户功能而提供的用户无法直接访问的功能。
招聘信息爬虫
用户行为信息记录
记录用户访问不同公司、不同类型招聘信息的频率,记录用户搜索的内容。
数据流分析
系统中主要的数据流有两个,招聘信息的数据流和用户个人信息的数据流。
招聘信息数据流源头来自于外部发布就业招聘信息的网站,由爬虫读取和简单的处理存储在系统的数据库中。输出的过程可以分为多种情况
- 用户请求查看详细招聘信息
- 招聘大厅
- 关键词搜索
- 根据浏览内容推荐
- 根据用户情况推荐
用户个人信息的数据流来源于用户注册、设置和系统对用户行为数据的记录。除了在用户设置个人信息的时候向用户输出以外,该数据流都在系统的各过程中使用。
另外为了说明用户请求和数据流的返回之间的关系,这里引入SpringMVC模式的流程图。
用户通过浏览器向服务器发出请求,该请求率先被前端控制器获取,再由前端控制器选择一个合适的控制器将请求转发过去由该控制器进行处理,控制器再通过调用对应的业务对象来完成数据访问、生成的过程,并将数据返回给前端控制器,前端控制器再选择对应视图模块对数据进行渲染之后呈现给用户。
由此先提前给出系统mvc的结构。
非功能需求
- 暂时还不明确
对爬虫的需求
对界面的需求
交互的需求
数据格式要求
系统设计
现阶段先对系统在包或者说模块的层面上进行划分
主要分为四个大模块,bean也就是model模块,controller控制器模块,dao数据访问模块以及静态资源模块。静态资源指网页相关资源。
对于控制器的划分思路是将功能需求中的功能对应到一个控制器,从而得到6个大的控制器模块。爬虫模块crawler,为了使爬虫在服务器上自动运行,需要将爬虫设计为一个servlet并设置部署到tomcat。
search模块,用户的关键词搜索的请求会转发到该模块。
recommend推荐模块,该模块会被前端控制器在调用网页访问模块时同时调用。
招聘信息访问模块,是主要的为前端控制器取得招聘信息的模块,由于前面search和recommend返回的都是招聘信息的id,需要依赖另一个模块取得简略的或完整的招聘信息。
用户信息记录模块,在用户访问网页和搜索时调用该模块进行记录。
登录、注册、信息修改模块,顾名思义。
bean和dao模块设计的情况依赖于数据流的情况。
差不多系统的分析设计就到这里,更详细的部份需要更深入的讨论来决定。
另外写在最后关于GitHub的问题。
由于网络的限制,访问GitHub的速度很慢,不仅是push还是pull(作者甚至都上不去了这几天),所以作者选择了国内有相同效果的gitee来进行版本控制和发布,但是由于检查要求将代码发布到GitHub上,所以在GitHub上导入gitee中项目,并定期同步内容。