1、系统设计目的
1.1 解决问题: 从业务角度解决产品功能问题,从技术角度解决非功能性问题
1.2 用于评审: 通过对方案评审,对质量进行把控,并对参与系统开发的人达成一致
1.3 用户归档: 使系统具有延续性,并能使其他人更好的理解系统
2、系统设计流程
2.1 识别问题
方案设计的首要目的是解决实际问题。要解决的问题可以从两方面考虑:功能性方面;非功能性方面。
-
功能性方面:功能性方面主要反映的是产品业务需求,这里要回答的问题是本次方案设计要支持哪些功能?
-
非功能性方面:非功能方面主要从技术角度考虑需要支持上述这些功能的系统在技术方面有哪些问题需要解决,
-
比如:
-
一致性问题、
-
性能、
-
规则复杂性、
-
可用性、
-
写操作的幂等性
-
依赖服务超时、中断、不可用(降级、重试、熔断等)
-
并发请求(保持并发下的串行)
-
超量请求(控制请求数量)
-
-
扩展性、
-
监控等。
-
-
不同业务系统面临的复杂性问题都是不一样的,重点和难点在于识别不同系统所面临的复杂性问题在哪里。
2.2 准备备选方案
当识别出本次方案需要解决的问题之后,需要针对问题准备备选方案,备选方案适合2~3个。
2.3 评估备选方案
准备好备选方案之后,这里主要针对备选方案进行评估,选择相对合适的一种方案。
2.4 方案设计
这个环节主要是针对上面选出的方案进行详细设计,需要明确以下几点:
1、系统涉及的角色
2、系统交互的边界(与内部系统的交互时序,与外部第三方系统的交互时序)
3、系统的功能点(用例)
4、实体关系以及边界
5、状态机
5、应用的架构
6、服务的时序(包含流程服务、领域服务的时序)
可参考:https://blog.csdn.net/jdzms23/article/details/82531438
3、方案设计checkList
-
合适原则:合适优与业界领先
-
简单原则:简单优于复杂
-
可演化原则:演化优于一步到位
-
业务时序包含所有涉众及外部系统
-
应用架构需要体现新增/删除应用、DB、MQ
-
系统用例功能数量与业务时序指向本系统的箭头数量一致
-
所有涉及外部系统的功能必须画时序
-
涉及外部系统交互必须包含参数、返回对象,并全部和外部确认可行
-
体现非功能性的思考
-
写接口以及消费者需保持幂等