怎么拆分系统?[面试7.0]
大部分的系统,是要进行多轮拆分的,第一次拆分,可能就是将以前的多个模块该拆分开来了,比如说将电商系统拆分成订单系统,商品系统,采购系统,仓储系统,用户系统,等等吧
但是后面可能每个系统又变得越来越复杂了,可能就要按功能来拆分了比如说采购系统里面又分成了供应商管理系统,采购单管理系统,订单系统又拆分成了购物车系统,价格系统,订单管理系统
拆分原则: 高内聚,低耦合
高内聚: 指将复杂的逻辑封装起来作为底层,并暴露简单的对外暴露的接口
低耦合: 不相关的业务属性尽量拆分开,互不影响
拆分后为什么要用feign或ribbon调用?[面试7.0]
因为可以实现软负载均衡,feign和ribbon都是基于httpclient的请求,只不过feign封装得更彻底一些,用了接口的形式
Ribbon需要用到RestTemplate,Feign直接创建和服务名称相同的接口方法名再调用即可
怎么用UML分析并拆分系统?[面试6.0]
用例图(椭圆): 和参与者一起用来描述系统功能(用例就是指功能),是一种静态视图
参与者: 不一定是人,它指一种参与角色
这里可以可产品一起,确定一件事,明确什么角色干什么事儿?
系统边界: 系统与系统的界限
时序图: 包括参与者,对象,生命线,消息,强调对象间的时序交互,时序图交互次数太多就需要将用例需求拆得更小,使得时序图更细粒度化
参与者: 发起用例的角色
对象: 位于时序图顶部,用来功能交互的
生命线: 时序图顶部对象和底部连接的虚线(垂直维度:显示个对象的职责)
消息: 两条生命线之间的通信内容(水平维度:显示对象间发送消息的过程)
确定需求的思路:
1.先找到用例
2.找到干系人沟通确定交互上下游系统,对象
3.进一步确定详细交互流程并画出时序图
协作图: 包括参与者,对象,连接,消息,强调对象间的协作交互
和时序图不同的是没有"生命线"
活动图(流程图): 不用介绍了吧,主要表达流程用的
泳道图: 是一种多泳道模式活动图,主要表达流程,可形成流程泳道,这样的表达相对于活动图更加复杂
状态图: 描述状态的图,有状态和条件等,比如支付状态,物流状态,标的状态等等
注意: ppt形式的协作图常常用在技术方案,架构方案,重构方案上面