Day 1 系统设计先导

摘要

在开发一个项目之前需要首先清楚地明白自己需要做什么。需要达到什么样的效果,采用怎样的技术路线去实现自己想要的效果。这就需要通过对需求的分析,得到项目的架构

Situation 需求分析

人性是提出需求的本源,通过分析 人性 来抓住 用户诉求。

需求分析角度

明确以下三方面:

  1. 边界:哪些是需要自己做的,哪些是不需要自己做的。

  2. 用户故事:能够以用户的角度,结合不同的用户场景,走完所有用户诉求。

  3. 用户路径:实现某种功能所需要的步骤。用户路径尽可能的短。

需求分析结果

得到的需求应满足以下条件:

  1. 模块化;

  2. 配置化;

  3. 有逻辑

需求落地路径

需求分析-》可行性-》设计-》编码-》测试-》发布

Architecture 架构分析

架构的定义

架构是一种能力,而不是岗位。架构用来描述项目代码的组成以及决策。

项目代码的组成:模块的结构及模块之间的关系。

项目代码的约束:设计原则及代码的生长方向。

总结来说如下:

架构=组成+决策

组成=模块结构+模块关系

决策=约束+设计原则+演化方向

架构解决的问题

通过架构分析,需要解决以下四个问题

  1. 确定技术上做与不做

  2. 确定模块之间的依赖关系与模块的输入和输出

  3. 使后续子系统在一个既定框架内和技术方向上继续演化

  4. 明确非公能性需求:安全性,可用性,可扩展性

架构的约束

在设计架构时,需要考虑的条件如下:

1.让系统由可扩展性和可维护性;

2.让系统恰到好处解决问题;

3.让系统3-5年不重构;

架构图 - 架构的体现方式

架构图的定义

水平上业务模块 + 垂直方面的技术依赖 形成的 逻辑结构图。

架构图分类

架构图的画法

  1. 明确架构图的类型

业务架构图:使用一套方法论,对所涉及到的业务单元进行划分

应用架构图:对整个系统的实现进行可视化落地实践。

数据架构图:对存储数据的架构逻辑,根据各个系统应用场景,不同时间段的应用场景,对数据进行诸如数据异构、读写分离、缓存使用、分布式数据策略等划分。

技术架构图:承接应用架构的技术需求,把各个关键技术和技术之间的关系描述清楚。

  1. 确认关键要素

  2. 理清关键要素之间的关联

  3. 使用显而易见的方式画出

布局:布局要符合大多数人的思维习惯

颜色:颜色突出主体

逻辑:能够体现出业务逻辑

UML 画类图及时序图

UML 的分类:

静态结构图:类图,对象图,包图,组件图,部署图

动态行为图:交互图(时序图与协作图),状态图,活动图

类图:

描述类之间的关系。类的六大关系:

泛化关系:类之间的继承。

实现关系:某个类实现某个接口。

聚合关系:类之间生命周期不完全一样,不存在很多接口的调用。

组合关系:类之间的生命周期一直,有较多接口调用

(为了分解任务,产生了聚合关系及组合关系。如果类之间是聚合关系,则任务可分解给多个人,如果类之间是组合关系,则任务最好分给一个人)

依赖关系:在类的方法中调用到了别的类。

关联关系:体现业务逻辑之间的依赖关系。

时序图:

描述对象之间发送消息的事件顺序显示多个对象之间的动态协作

关注正常流程

不关注逆流程

不关注异常流程

不关注分支判断

结论

作为工程师,不仅需要了解技术,同时应该理解需求。当对需求有深刻了解的时候,架构设计上才会出现神来之笔。

站在模块之间的角度上:需求推导出模块;工程师的经验+系统设计原则推导出模块之间的关系;根据以上两点,选定技术栈及技术路线。

站在模块中的类角度上:OOD设计原则推导出该写哪些类,以及每个类应该怎么实现。

后续工作

熟悉OOD设计原则:阅读并实践 Head First OOD。

熟悉23中设计模式:实践这些设计模式。

完成T31类图及时序图设计;

按照以上方式,设计当前公司的工单系统。

在实践过程中补充本文。

附录

OOD设计原则

目的:提升软件可扩展性,可维护性

单一职责

高内聚、低耦合的延伸。最简单也是最难的。

  1. 属性和行为向着模块 预先定义的功能 内聚

  2. 模块的名字非常重要

违反的危害:

  1. 难以维护

里氏代换

父类能出现的地方,子类一定能出现。

违反的危害:

  1. 瞎继承

接口隔离

接口粒度要尽可能小。接口内方法强内聚同一特征。

违反的危害:

  1. 违反了单一职责

组合复用

尽量用组合,不用继承。

违反的危害:

  1. 违反里式替换

  2. 造成接口污染:多态

依赖倒置

细节依赖抽象。底层依赖高层。

违反的危害:

  1. 代码复用性太差。

迪米特原则

不需要关注具体代码实现。

(不能返回多余的东西)

违反的危害:

  1. 难以维护

开闭原则

对扩展开放,对修改关闭

任何变化的点,都需要被隔离出来。

识别和隔离变化的点。

违反的危害:

  1. 难以维护

重复代码的危害

  1. 不一致性

  2. 代码冗余

  3. 容易出bug

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值