三、系统分析与设计
需求分析
在移动支付时代的各种账单流水中,跨平台的互通性一直是家庭理财的一个痛点,便携性、实用性、安全性难以权衡保障。一个属于自己的、能够满足多方面实际需求场景的家庭理财系统对于普通理财用户的发展来说显得至关重要。首先,并非所有家庭、所有角色对股市与基金市场都存在刚需,对股票、基金市场关注度较高的家庭成员也未必需要主持家庭收支问题,但如果有一款系统能够同时兼顾家庭收支、家庭资产与负债、股票市场与基金市场,那么家庭各成员就可以各司其职,在同一系统内,各自负责不同的板块,这样既能起到家庭理财记录的作用,也能让家庭的资产、收支等方面变得透明。对于市场上已有的各类记账软件来说,用户总是为隐私与广告推送所烦恼,对于专业理财软件来说,他们并不能合理地兼顾到自身家庭收支记录与资产汇报。
本着家庭理财实用性的具体情形,理财与家庭资产、收支之间的平衡,本系统依据实际使用场景,对家庭收入与支出、股票与基金市场、固定资产与债权债务、月末/年末家庭收支报表等方面的实际应用场景进行集成,在移动端、PC端都能有较好的体验,采用分布式部署形式,部署在个人服务器上,保障系统安全性,同时采用分布式部署形式,满足实际基本需求,性能较高。
根据上述调查与研究,基本确定了本系统将会实现的具体业务逻辑与功能:
- 家庭收入、支出信息的添加、修改、删除、查找分析与信息导出功能
通过Spring Cloud书写业务逻辑,让用户通过视图层与后台数据建立联系,以达到对MySQL中建立的家庭收入、支出数据库表字段进行交互,所有字段设置自增属性,具体字段以java代码通过实体类对主键与信息进行操作与分析,即收入/支出金额、分类、备注、操作人员、操作日期。导出功能将通过java类对excel进行操作,并以IO的方式传输到前台,供用户保存本地、备份等。
- 股市、基金市场的查看、搜索、实时统计、分析、收藏功能
股票、基金市场由于需要对应市场的动态信息与历史数据,考虑通过爬虫或第三方触点与接口进行数据抓取与分析展示,数据库内的字段将记录用户收藏、关注的对应股票/基金详情,并通过java代码与前台用户操作进行对应的业务逻辑处理。
- 固定资产与债务、债权的查询、分析、增加、修改、删除与汇报功能
固定资产与债务、债权的基本分析同比收入、支出信息的基本操作,在基本功能的基础上,研究资产与债务、债权的特性,对相应的分析、汇报、导出功能进行业务逻辑梳理,调整分析算法,最终以实际设计模型为基础通过编码逻辑实现。
- 邮件推送、定时任务管理、月末年终分析功能
邮件推送功能中包含了上述所有功能的分析模块,考虑将对应分析成果通过缓存中间件redis进行缓存,并通过消息中间件进行信息推送与持久化任务的业务编排。月末年终分析也将包含以上模块的后台数据,系统将以远程调用的形式实现微服务之间的通信,减少模块之间的耦合度,分析结果也将通过缓存的形式保存到非关系型数据库,同时通过定时任务实现每月月末与年末的报表分析与推送功能。
系统设计的原则
系统的开发与研究应当立足实际,立足于基本需求,解决实际问题。分布式家庭理财系统是一个融合经济与科技的面向用户的交互式系统,而保证系统设计目标的实现是系统设计总的原则,此基础上能够以最佳的比率让技术资源得以利用。因此分布式家庭理财系统的设计中,应遵循以下原则。
系统性原则
系统是一个有机整体。在分布式家庭理财系统的设计中,首先应该从整个系统角度进行构思,使整个系统拥有统一的规范化的信息接口、数据结构与数据组织方法、结构设计规范与标准,尽可能地提升本系统在设计方面的整体品质。
经济性原则
经济性原则实现的前提在是系统整体需求得以保障的条件下,最大程度地缩减系统的开支。首先,避免一味追求高配置与高性能的硬件,要把满足系统预期最低需求当作前提条件。其次,系统设计中不应盲目错综复杂,应当遵循低耦合、高内聚,各独立的模块应当倾向简洁。
可靠性原则
可靠性原则是评价系统设计质量的重要指标,也是系统设计的基本出发点之一。因此我们设计出的系统应当是安全可靠的,安全性方面主要体现在:保护用户隐私,防止DDos攻击,防SQL注入攻击等,稳定方面体现在使用分布式微服务的开发部署理念,前后端分离,模块分离部署,有效防止某一服务器宕机后导致整个服务器无法使用的局面。
系统整体架构设计
本系统将采用B/S架构,所以用户交互主要通过浏览器的WWW来实现。系统前端通过Node.js将所需的各种服务与工具集成到项目中,如NPM、WebPack、TCP通信协议WebSocket等,然后引入系统前端项目核心语言Node.js,基于Node.js我们则能够引入前端UI框架Ant.Design Pro,同时结合Umi完成前端的MVVM架构设计。前后端通过Nginx反向代理进行交互,用户请求将在前端以HEAD、GET、POST的请求方式通过 HTTP的形式发送到web服务器Nginx,Nginx通过路由前缀将对应请求反向代理到后端应用服务器网关,并通过后端应用服务器网关进行统一的请求管理.
系统后端通过Spring Boot整合Spring Cloud的各种组件,并通过maven进行包管理进行项目引入、模块打包等。路由微服务Zuul将通过路由前缀获取到由客户端发来的请求,并将其通过微服务的映射路径分发映射请求到每个理财系统微服务的接口中,同时在Zuul中引入Ribbon进行负载均衡策略,最后通过Hystrix进行失败容错策略。后端所有微服务将通过Eureka进行服务的注册与治理,服务之间内聚度高,耦合度低,逻辑关系调用将通过Feign进行。服务端应用Mybatis操作SQL语句控制数据,通过Hykari数据连接池与数据端MySQL数据库进行数据请求与交互。当股市/基金市场有变时,将通过消息队列RabbitMQ更新到本系统中,同时,消息推送与报表功能的数据将会在后台定时任务完成后被存储到Redis缓存中,用户登录缓存一致性也将通过Redis进行实现。系统详细架构设计如图3-1所示。
图3-1系统详细架构设计
系统模块设计
收入、支出微服务设计
收入与支出微服务(bills-service)用于家庭日常收支记录、整理、分析与展示,微服务中的功能包含:创建、修改、删除、查询分析收入与支出信息,收支平衡分析与信息持久化。具体设计如图3-2所示。
图3-2收入与支出微服务设计图
源码和文档都托管在了【WRITE-BUG数字空间】上面了,有需要的可自取~