571
社区成员




现在,随着社会的不断发展,医疗水平也在不断的提高,与此同时,人们的生活质量也一直在改善。就在大家将更多注意力投向胃癌、肝癌等严重危害人们身心健康疾病的同时,前列腺癌正逐渐成为威胁中老年男性健康的头号杀手。
病理医生在这种高强度、长时间的阅片过程中,容易出现判断错误的情况。另外,这种高度过度依赖人为因素的诊断过程具有主观差异性。这些因素都增加了医患纠纷的发生几率。
设计一个病理切片智能辅助诊断系统,可以减少病理医生的出错率,给病理医生阅片过程中提供高价值参考性。
需求分析
前端具体需求:
上传一张病理切片图片,用户可以缩放和拖拽,当鼠标悬浮在癌化区域时,鼠标变成可点击样式,然后点击可以显示该区域,并且有左右箭头,点击左右箭头可以显示其他癌化区域。
支持搜索图片,后台存放已上传图片及处理结果,用户可通过搜索查看指定图片及处理结果,也可通过浏览列表选择文件。
后端数据库需求:
保存已上传图片及其处理结果
后端模型需求:
输入一张前列腺病理切片图片,得出癌化等级,并且分割出大致区域,给出局部区域癌化等级。
后端web服务器需求:
协同控制各部分模块运行工作。
本系统医生账号不对外开放注册功能,新增加账户需通过管理员注册。
登录后首先系统进行权限认证判断是管理员还是医生。
管理员可以增加和删除医生账号。
医生可以查看病理切片图像列表,上传病理切片。
系统流程图如下图所示:
系统层级设计采用传统的MVC模型,如图:
View就是前端界面,这里view通过http协议与后端进行通信。Controller接收到请求后进行处理,如果请求带有数据将会对收到的数据进行校验。Service会对来自Controller的数据进行处理然后通过Model写入数据库或者通过Redis层写入缓存中。同时Service也会负责协调MySQL和Redis之间的关系。
处理完请求之后,Service将通过Model或者Redis从MySQL或缓存冲获取数据,经过业务处理然后通过Controller发送给View。
ngnix:做反向代理
UserController:用户信息相关功能
ImageController:图像相关功能
CommentController:评语相关功能
ResultController:切片处理结果集
MySQL:数据库
Redis:缓存数据库
数据库结构图如下图:
对于本系统,需要存储用户信息,图片信息,评语信息,结果集。数据库能实现配置管理系统的数据持久化,是系统的重要组成部分。本系统将选用MySQL数据库进行后台数据库开发、建立各部分数据表。
各个表的功能与结构设计如下:
user表用来存储用户的信息,在本系统中,用户是指管理员和医生,医生是主体。user表数据如下表:
字段 |
类型 |
内容 |
id
|
varchar |
医生id
|
username
|
varchar |
用户名
|
password
|
varchar |
密码
|
name
|
varchar |
姓名
|
deleted
|
tinyint |
逻辑删除 1(true)已删除, 0(false)未删除
|
gmt_modified
|
datetime |
创建时间
|
gmt_create
|
datetime |
更新时间
|
表1 user表字段
image表用来存储当前上传的图片信息,包括图片链接和状态,以及对应的上传用户信息,image表如下表:
字段 |
类型 |
内容 |
id
|
varchar |
图片id
|
doctor_id |
varchar |
医生id |
url
|
varchar |
图片地址 |
deleted
|
tinyint |
逻辑删除 1(true)已删除, 0(false)未删除
|
gmt_modified
|
datetime |
创建时间
|
gmt_create
|
datetime |
更新时间
|
表2 image数据库字段
comment表用来存储医生对当前区域的格里森评级评级与评语,包括当前区域号,格里森评级以及相应的评语,comment表如下表:
字段 |
类型 |
内容 |
id
|
varchar |
评语id
|
image_id |
varchar |
图片id |
doctor_id |
varchar |
医生id |
url
|
varchar |
图片地址 |
area_number
|
int |
区域编号 |
content
|
text |
批注文本内容 |
grade
|
int |
格里森评级 |
deleted
|
tinyint |
逻辑删除 1(true)已删除, 0(false)未删除
|
gmt_modified
|
datetime |
创建时间
|
gmt_create
|
datetime |
更新时间
|
表3 comment数据库字段
result表用来存储机器模型对相应图片的处理结果,其为一个对应的json数组,包含点坐标,格里森评级,区域宽高的信息,result表内容如下:
字段 |
类型 |
内容 |
id
|
varchar |
结果集id
|
image_id
|
varchar |
图片id |
content
|
text |
处理结果json数组 |
deleted
|
tinyint |
逻辑删除 1(true)已删除, 0(false)未删除
|
gmt_modified
|
datetime |
创建时间
|
gmt_create
|
datetime |
更新时间
|
表4 result数据库字段
在我们的系统中,有一些对象其实我们只需要一个,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。事实上,这一类对象只能有一个实例,如果制造出多个实例就可能会导致一些问题的产生,比如:程序的行为异常、资源使用过量、或者不一致性的结果。
使用单例模式的好处:
Spring 中 bean 的默认作用域就是 singleton(单例)的。 因此本系统中后端各种bean都是单例的
AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了。
本系统使用AOP实现了记录日志的功能,故涉及了代理模式。
作者:480
用例图画的不规范