我的工作生涯中关于项目的需求和功能分析(房地产项目)
这一篇是 我在之前的之前公司中最后一个项目,期间虽然有一些小项目,但都内容都不及我之前的几个,当然我之前的几个也不算大就是了。
好了,这个项目是一个A轮创业公司的,创业一般不会来找外包,就算来找外包,项目进度也需要非常快,功能要求多。
不过经过我研究他们的需求后,发现要的功能不是特别多嘛 。。。然后我就错了。。。
开始项目分析:
首先单就功能描述来说,就是房产中介,类似房*多,房*下这些,他们老板也说了照这个抄一个大概就可以,看到这里我就知道抄一个差不多是有多困难。。不过反正是给多少钱做多少事。。
首先当然是没有异常监控平台的,所以也只有一个服务器,不过毕竟是一个房地产项目,该有的功能还是应该有的,然后则是vr 装修和 3d全景看房。
- 准备工作,域名优化和路径优化,因为有伪分站和url优化的需求,毕竟创业公司相对来说更注重这些东西。
- 首页 ,首页包含的内容相对其他同类型网站来说比较少,只有推荐楼盘,楼盘城市,网站功能导航和顶部导航,顶部是导航,上部主要功能凸显也就是VR看房,中间部分是网站导航和城市,底部是网站信息。
- 首页搜索 网站核心功能也就是房产信息的搜索和筛选(条件查询)功能。
- 首先是房源分为,二手房,新房和租房,二手房有砍价,Vr全景和预约功能,而租房有预约和在线聊天,新房有比价和vr全景。
- 预约功能,是提交一个表单 有手机号和预约时间,得到这个时间后,运营会打回访电话确认。
- 砍价也是表单提交,和上面的预约功能差不多,但是运营方面的内容是不一样的,砍价需要和客户联系获得客户心理价位,然后和卖家砍价,这个还是一个收费项目,线下收费,当然这里面猫腻太多,不过对我来说是没必要考虑的。
- VR 房产信息展示,这个是从 喵** 他们制作vr,然后由运营把制作出来的vr放到服务器中并填写路径。
- 在线聊天是与卖家沟通,这里如果为了增加用户粘性应该是app内聊天,但是因为技术原因目前是qq聊天。
- 比价这个功能可以在客户端实现,用户选择一个新房,点击比价功能,在页面右侧有一个比价界面,之后再选择另一个新房,点击比价后,弹出或跳转到一个页面,在这个界面中显示多个新房的信息。
- 地图位置和周边。
- 3D家装渲染, 集成酷**。
- 租售中心,主要是描述该功能的页面,以及一部分指引。
- 用户中心功能,登录,注册,发布房源,收藏房源 ,qq登录,微信扫码登录和微博登录。
- 计算器功能
- 后台运营功能
- 手机端,功能和pc端差不多
- 二手房,租房和新房不变,Vr在线换材,也就是我实际制作的功能,这点会在后面细讲,虽然功能分析我全部做了,但是我实际编写的部分就是Vr在线换材,之后就离职了。。。。
- 这里功能大概和pc端差不多,但是取消了比价功能,毕竟界面不是特别好弄,数值也不是很好显示。
接下来就是功能实现部分:
- 所谓的url优化和路径优化, 路径优化 是以restful 风格 作为对应的风格,也就是 比如 https://www.baidu.com/search/你要搜索的内容 这样的就是 restful 风格,关于这个我就不过多的解释了。
- 然后是url优化,因为分站存在的关系,比如 房*多 他们就是这样的:http://shanghai.fangdd.com/ 而这里的伪分站指的是同一个服务器,但是开启了泛域名后,在解析url时参数前置 ,例如原本是 http://www.fangdd.com?city=shanghai 这里在配置url路径的解析规则时前置参数而形成虽然输入的是 shanghai.fangdd.com 但是实际请求的是同一台服务器,只是新增了这样一条解析规则,这里告诉大家一个小技巧,也就是 真分站还是我这样的伪分站,就是查看不同域名的ip是否指向同一个服务器,当然这是敲门是对一般的小网站来说,大型的网站不用想,肯定是分布式服务器,而且因为 反向代理技术(通常使用Nginx)的原因,有时候你访问一个域名下的不同域名看到的ip 可能反而是相同的。
- 反向代理致敬godv ,先理解正向代理,一般来说就是用户通过 代理服务器上各种不同的网站,那么反向代理就是 根据用户的请求来响应不同的服务器。
- 首页部分功能是数据提取后显示到主页,但这里有个问题,首页的内容通常来说是不能变动的,而这里就要根据客户需求做出不同选择了,如果想在有限条件内变动,比如不改变样式而改变页面中显示的内容,可以使用缓存技术,而如果希望页面内容一直不改变则可以使用生成静态页面来实现这部分功能,但到了一定数量级之后,都会走向数据分析后智能显示页面内容。
- 首页搜索功能以及 其中板块筛选内容,这部分就涉及到了 多条件查询以及模糊查询,如果单用sql自带的查询那性能可就很低了,这里也有几种处理方案,1就是最基本的sql查询,虽然性能比较低但是最简单。2是使用全文检索引擎和分词工具,各个成熟语言都有对应的功能,集成起来也不是很麻烦 。3 就是使用 Elasticsearch 作为服务调用,关于这个搜索服务器 其实也是调用api ,对程序来说 接口就是越来越高层,以我的性格肯定是使用第三种,但这部分毕竟是别人做的,所以这里项目中使用的是第二种方案,相对折中一些吧,实施起来也比较简单。
- 页面的功能就是房产信息列表和详情,这个在上面说了使用全文检索工具来显示,然后通过外键保存房产 tag 信息,以多对多来复用tag。
- 然后是页面中的预约功能和砍价,这部分数据可以存放在一起,以一个字段来区分是预约还是砍价,最后在2个页面中显示,在后台也需要一个字段来标记运营是否处理以及处理情况,还有一个外键来存储用户处理情况信息描述。
- Vr房产信息,一般来说一个房屋只有一个vr全景,但是如果是同户型的,那么就没有重复上传的必要了,所以上传对应房产的页面需要有一个text文本框,上传完毕后也会返回一个text ,通过这个text 来达成复用同一个vr全景的功能以节约服务器硬盘空间。
- 在线聊天,这个也有几个解决方案,首先就是最简单的借助第三方来达成这个功能,app间通信可以使用第三方框架也可以自己实现,具体实现细节就是有一个房间,这个房间中只有源用户和目标用户,之后再怎么做就不用多说了,我在其他语言了解不多,但是据我所知 c#方面有一个SignalR的框架,有兴趣的可以了解一下,我只能说大软爹的东西就是好用,这个工具实现出一个聊天室功能真的用不了几行。
- 这部分是集成 酷** ,具体什么公司懂的都懂,是一个在线设计和渲染家庭装修的网站,使用flash实现。
- 租售中心只是一个描述页面,描述对应功能,但对应功能只是一个提交表单联系客服。。
- 用户中心登录注册等等可以使用rbac框架来实现对应功能,发布,收藏,删除,修改房源,这部分注意不要能修改其他用户上传的房源就好了,然后是后台要有开关这部分的功能,所以这里可以通过rbac框架基于user和 role来实现,比如配置一个全局拦截器,当用户访问这个页面时,拦截器根据是否允许访问来允许或拒绝用户是否能够访问。
- qq登录,微信扫码登录这些都有api和文档,实在不行看别人的实现案例就可以了,花费的时间不是很长。
- 计算器功能就是税率计算器等一系列计算器,这里还是先从网上抄一下,然后看看有没有什么浮点错误和除零问题之外,基本没什么好说的,唯一要点就是找一个比较新的。
- 后台运营功能,也就是运营常用的功能,无非就是用户管理,房源信息管理什么的,其实没什么好说的,因为某些原因所以也没有错误监控平台,毕竟只有一个服务器,如果出现问题也就只能开发来看看日志再根据错误原因来复现和解决问题。
- 手机端的其他功能在上面基本都有描述过了,这里重点数一下 手机端的 vr在线换材。
- 首先这个功能在初期是基础当前平台的帐号和密码,但是因为某些原因,这个功能是一个单独的域名和服务器。
- 该功能主要是根据对应的城市选择楼盘,选择完楼盘后再选择户型,之后再根据户型进入vr换材页面,服务器保存对应用户的vr换材,之后再选择设计师和项目经理,再之后就结束流程。
- 看似很简单,但光这一部分我就做了2个月左右,首先根据城市选择对应楼盘,选择对应楼盘后再选择对应户型,这一部分因为我们前端只会写静态页面,所以与后端交互的js是我自己写的。。。但是我是后端,所以js写的也不是很好。
- 之后进入vr换材,这里的vr场景依旧是 喵**他们制作的,然后他们依旧只制作vr场景,与数据库交互依旧变成了我来编写。。。。那这一部分逻辑就复杂了,因为vr场景有 风格,房间和选材,我要做的就是根据用户选择跳转到对应vr空间,在空间中保存用户选择的风格和用户选材,这部分可以说是最麻烦的,1是制作vr场景的参数很容易出错,而且他们的参数很简单 ,我给个示例: cq1-d2-g4 意思就是 厨房的 墙面的1号墙漆 和 地板的2号地板 和 橱柜的4号橱柜。。当时我就懵逼了是吧,大哥你用json 或者xml也比这个好啊。。。然后这部分还容易出错,因为装修建材里是有重复名称,升级和普通内容的,总之我的实现方式是 ,当用户选择完城市楼盘和户型后,生成数据库主表内容,之后再根据用户选择保存成外键内容,再选择完毕后再保存外键设计师和项目经理,之后还有升级包内容,也就是普通装修不带吸油烟机,但是升级(付钱)后选择合作品牌的装修材料。
- 总之这部分有太多的技术实现细节,但是确实是光说也就上面这些了。
- 这部分还包括用户登录注册,微信qq登录还有后台管理功能,有 城市,楼盘,户型, 装修材料,类型和区域,装修材料和区域是多对多关系,然后在多对多关系中保存是否是升级包以及价格,因为不同楼盘和户型中对应装修材料是不同价格的。
- 总结:这个可以说是我花费精力最多,技术细节最多,我个人感觉我所做过的项目中是最难的一个项目了,也花费了我全部的精力,总之就是在个人能力有限的情况下,采取适中的实现方式和良好的时间分配还有问题的良好的总结,是我作为整个公司唯一一个后端兼实施兼运维兼测试兼项目经理的肺腑之言,一个人的能力是有限的,同时一个人的精力也存在巅峰和低谷,所以尽量扬长避短,自己做不了的地方一定要说出来。