张晗的个人博客

技术的价值是业务

总结

  • 软件架构不是预先设计;

  • 每个团队都需要考虑软件架构;

  • 架构师参与编码;

  • UML 不是必须的;

软件架构的本质

包含一个软件产品从端到端的完整的、与之相关的、重要的完整元素的综合考虑。

软件架构的好处

  1. 让团队跟随一个清晰的愿景和路线图,无论这个愿景是一人所有还是整个团队共有;
  2. 形成技术领导力,能够更好的协调;
  3. 与人交流的刺激因素,以便回答与重要决策、非功能需求、限制和其他横切关注点相关的问题;
  4. 识别和减轻风险的框架;
  5. 方法和标准的一致性,随之而来的结构良好的代码库;
  6. 正在构建的产品的坚实基础;
  7. 对不同的听众,以不同层次的抽象来交流解决方案的结构

软件架构的职责

理解业务目标

  1. 需求。包括功能性需求和非功能性需求等;
  2. 限制。包括环境、人员水平和预算等;

设计软件

  1. 技术选型;
  2. 架构设计;
  3. 模块拆分;

风险管理

技术选择其实就是风险管理。

  1. 当复杂度或不确定性高的时候降低风险,有利可图时再冒点险;
  2. 主动发现、减轻和承担高优先级的技术风险;

架构演化

贯穿软件交付整个过程,持续关注架构演进。

参与开发

  1. 从开发角度看架构;
  2. 不一定完成日常的编码任务,但要持续地参与到交付中;

保证软件质量

保证一条基线,它可以是引入一些标准和工作实践,如编码标准、设计原则和工具。

软技能

领导力

创造共有愿景,并带领同事向其前进的能力。

沟通

不解释。

影响力

说服他人、倾听他人的能力。

信心

信心不是傲慢,是领导力、影响力和沟通的基础。

合作

倾听、谦虚和响应反馈。

导师

辅导、引导和指导下属。

动力

不解释。

润滑剂

凝聚团队,达成共识。

政治

远离但要了解。

责任感

不解释。

授权

适当授权。

软件架构的经验

引入约束

先从部分控制开始,倾听反馈,以便随着项目的推进再微调。

包容

让组内成员参与到软件架构的过程中。

参与编码

不解释。

软件架构的考虑

为什么软件架构角色应当包含编码、指导与合作

为什么软件架构角色应当包含编码、指导与合作

如何用简单的草图让你的软件架构可视化

为软件生成文档的轻量方法

为什么敏捷和架构并不冲突

“恰如其分”的预先设计是什么意思

如何通过风险风暴来识别风险。

链接

程序员必读之软件架构

Redis 的列表是一种线性的有序结构,可以按照元素被推入列表中的顺序来存储元素。这些元素既可以是文字数据,又可以是二进制数据,并且列表中的元素可以重复出现。

阅读全文 »

模式描述

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便于恢复到原先保存的状态。

优点

  1. 备忘录只能由 Originator 来创建,保护封装边界;
  2. 简化了 Originator;

缺点

  1. 使用备忘录代价可能很高;
  2. 一些语言难以保证只有 Originator 访问 Memento;
  3. 维护 Memento 有潜在代价;

应用场景

  1. 需要保存一个对象的状态,便于恢复到原先保存的状态;
  2. 放丢失、撤销和恢复;
阅读全文 »

Redis 散列键是将一个 k 与一个 map 在数据库关联起来,和 string 类型一样,k-v 可以是文本,也能是二进制。

阅读全文 »

模式描述

当一个对象的内在状态改变时,允许改变其行为。

优点

  1. 状态转换是显示的;
  2. 特定状态的行为是耦合的;
  3. State 变量可以被共享;

缺点

  1. 会造成子类变多;

应用场景

  1. 状态不多,状态转移也简单,但触发状态后执行逻辑复杂;

  2. 一个对象的行为取决于它的状态,并且必须在运行时根据状态改变行为;

阅读全文 »
0%