业务需求


  1. 中介从业用户发布二手房房源信息,要求能够上传房源图片,房源图片控制在8张。
  2. 发布过程中,为了避免用户使用失误,要求房源图片上传后且在房源其他信息尚未提交前,就算不小心刷新页面,上传的图片信息也要能够保留。
  3. 图片上传后要能够立刻在页面上显示缩略图效果。

需求分析


  针对图像文件,我们一般是将其保存在服务器的硬盘中,而非存储到数据库中,仅仅只是把文件的路径保存到数据库中,需要时,再查询后调用即可。所以我们需要设计一张表,用来放图片的基本信息。

  一个房源一般是可以拥有多张图片,同时依据实际业务的限定来说,一张图片正常也只能对应一个房源(避免假房源),所以我们在设计数据库表示,房源与图片应该是一对多的关系。而我们的产品需求面向的是二手房经纪人,一个房源信息在网站上肯定是会重复的,房源与用户的对应关系是多对多的关系。所以为了方便用户管理图片,我们图片资源表也应该与用户建立联系,用户与图片资源的对应关系也应该是一对多的关系。

  正常在网页中,我们都会在同一个页面中完成基本信息和图片上传的任务,但是但是图片上传一般情况是在<input type="file">控件添加文件后,在整个大的表单提交前,就先把图片上传到服务器做处理,所以头像上传是先做的,然后再做普通信息的提交。

  这就有一个问题了:这两个操作是分步进行的,那如何能够将两部分的信息关联起来,并且还要预防中间出现的任何意外状况,比如:

  1. 上传了图片,结果房源中途因其他原因不发布了或以后再发布,这种情况一旦多了,势必造成很多垃圾资源的堆积。
  2. 图片上传之后,网页卡死,不得不刷新页面,刷新后无法获取已经上传的图片信息,导致用户体验下降。
  3. 图片是优先上传的,这意味着房源信息还没建立,自然数据库中房屋ID还没有,那要如何建立图片与房源之间的关联?

功能设计


为了解决一系列的问题,我们可以这么做:

  • 首先:图片上传时,当上传成功后,随即将图片信息写入数据库,数据库结构如下图:

    其中用户ID和房屋ID分别与用户表和房屋信息表建立外键约束(当然其实只要逻辑有控制,数据库中不建立也无妨),房屋ID设置为非必输。当我们上传图片时,因为房屋信息还没有建立,所以此刻我们根本是无法获取房屋ID,但是我们可以获取得到用户ID,这样可以先让我们的图片资源,与用户先做一个关联,这样做关联的好处在于后续我可以对房源信息表单提交时,校验一下用户ID,确保不会出现一些漏洞或风险(篡改他人数据)。
  • 其次:写入数据库成功后,将写入的数据都装入List集合当中,通过Ajax返回前端,然后刷新页面,并且将IMAGE_ID设置到<img>的alt属性当中,把IMAGE_SRC设置到src属性当中,这样就可以把缩略图显示出来了。当然这只是一种办法,我们可以创建一组<input type="hidden">的控件来暂时储存这些数据。用于后续表单提交时,一并再传到后端。
  • 当房源信息表单提交后,后端先将房源信息写入数据库,然后再校验刚才的那些图片信息是否与当前操作的用户ID相同,验证通过后,就可以插入HOUSE_ID到图片信息表当中了。
  • 这样就建立了完整的图片与表单分部上传的机制,保证了信息的完整性和真实性。最重要是能够保证图片资源与房屋资源能够正确的建立起关联。
  • 回顾我们其实还有一点需求没有达成,就是当用户上传后图片结果中断了房源发布,那怎么办呢?其实办法很简单,这只需要通过设置定时任务,比如在夜间跑批的时候,统一的查询数据库中,没有HOUSE_ID的图片信息,既不完整的图片信息,然后就可以根据查询出来的SRC地址,转换成本地硬盘目录,然后再删除它们,删除的方法也有分两种,一种是直接在JAVA中删除文件,还有一种是将文件的路径都保存下来然后写入一个文本当中,接着调用本地命令或脚本,一并删除。我个人比较倾向于后者,我是直觉认为这样效率可能会高一点,但没有做过测试,有兴趣的朋友可以试试。

转载于:https://www.cnblogs.com/wuxinzhe/p/6217494.html

[分析与设计]二手房房屋图片功能需求分析与设计相关推荐

  1. 数据库设计和功能需求分析------后台设计概述

    功能需求分析和数据库设计 不论是Web开发还是Android开发,在设计后台的时候我们都要做的重要的事情不外乎两点:1. 需求分析:2.数据库表格的设计.在进行这两项工作的过程中,第一项工作对第二项起 ...

  2. 【QT课程设计】一:基本布局设计与选择图片功能

    文章目录 前言 基本布局 选择图片 前言 最近由于一些个人生活事情,课程设计拖了很久=.= 在确认过相关要求.反复更改后,最终决定当前的版本,首先是最基本的要求,打开图片并显示的功能. 基本布局 这个 ...

  3. 基于单片机病房呼叫系统数码管显示房号设计-基于单片机工业生产现场的光照强度控制设计-基于单片机多功能智能台灯设计-基于单片机二维码LCD显示设计-基于单片机多功能时钟闹钟万年历控制系统设计【毕设分享】

    1641基于单片机病房呼叫系统数码管显示房号设计 设计思路:此设计实现的功能通过按键模拟房号,当按键按下时会将房号编号发送到数目管上进行显示,并通过声光进行提示.包含的电路有:数码管显示电路.按键电路 ...

  4. html5学生dw网页设计大作业,hbuilder仿茅台集团网页设计成品模板,图片轮播网页设计模板

    html5静态网页设计要是用HTML DIV+CSS JS等来完成页面的排版设计,一般的网页作业需要融入以下知识点:div布局.浮动.定位.高级css.表格.表单及验证.js轮播图.音频 视频 Fla ...

  5. java评论回复表设计_评论回复功能数据表设计

    CREATE TABLE `comment` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `topic_id` int(10) unsigned ...

  6. 计算机设计大赛国奖作品_3. 需求分析

    计算机设计大赛国奖作品_3. 需求分析 本系列是2021年中国大学生计算机设计大赛作品"环境监测无人机航线优化"的相关文档,获得2021年西北赛区一等奖,国赛三等奖.学生习作,只供 ...

  7. 如何设计电子商务网站的功能

    摘要:本文从商家的商业战略规划(客户关系管理和大规模定制)以及消费者购买决策支持这两个方面分析了应如何进行电子商务网站功能设计,提出了网站设计应该是以企业商业战略为主导,以客户为中心,以技术为辅助的观 ...

  8. 基于java的企业人事管理系统设计--软件工程课程设计(含源码与论文设计).rar

    1 引言 4 1.1 课程设计目标 4 1.2 编程工具(编程环境)介绍 4 1.3 实施时间及主要实施步骤 4 2 需求分析 5 3 系统总体设计 6 4 数据库设计 6 5 主要功能模块的设计与实 ...

  9. 举例说明层次分析的三大原则_【图片】房屋室内装修中软装设计的六大原则和三大要点【成都装饰公司吧】...

    据小编所知,"轻装修,重装饰"的概念越来越被人们接受,利用软装来装饰家居,不仅能省下一笔装修费,更会带来不一样的装修效果.下面成都装饰公司大晶装饰小编就为大家介绍一下房屋室内装修中 ...

最新文章

  1. compileSdkVersion,minSdkVersion,targetSdkVersion还有buildToolsVersion的区别
  2. Oracle LAST_DAY(d)
  3. Vue组件之全局组件与局部组件
  4. vue检测不到data里数组里面元素的变化
  5. python3 str 数字类型判断 str.isdecimal(), isdigit(), isnumeric()
  6. bzoj 1093 [ ZJOI 2007 ] 最大半连通子图 —— 拓扑+DP
  7. 无敌打印(适用各种浏览器自带打印功能)
  8. 带485接口伺服电机使用MODBUS协议控制
  9. PcShare2005控制端修改
  10. Imdisk 虚拟磁盘 » A programmer's site
  11. C语言编写一个计算字符串长度的函数 my_strlen();
  12. 桌面的html快捷消失了,桌面上的IE浏览器不见了解决教程
  13. 5G笔记| 概述:5G三大应用场景、5G关键技术概览
  14. 通用能力-智力题专项练习(2)
  15. 产品经理之需求管理(非原创)
  16. 深度搜索(DFS)和广度搜索(BFS)
  17. android stdudio OpenCV NDK 开发环境搭建 之找查条形码
  18. Apple M1 上安装tensorflow开发环境
  19. 用友总账模块显示不能登录到服务器,用友软件部分常见问题
  20. 课程设计:通讯录管理系统

热门文章

  1. 知其所以然(1)(2)(3)(关键词:算法)
  2. 福布斯2007中国富豪榜出炉 杨惠妍26岁成首富
  3. win10下python+pycharm的安装与破解
  4. 浪迹天涯之——乖,摸摸头
  5. log(n)怎么理解
  6. 亚马逊测评使用的买家账号怎么养?测评自养号需要具备哪些条件?
  7. 开篇语-如何学习新能源汽车技术
  8. 初级经济师报考条件,报考时间全攻略
  9. 关于5G时延的深度解读,非常详尽!
  10. Revit开发柱附着和分离