软件架构定义
架构是在组件彼此间和与环境间的关系,引导设计发展原则中体现的系统的基本结构。
系统是为实现某个(些)特殊作用的组件的集合。专用系统包括个人应用,传统概念上的系统,子系统,系统中的系统,产品线,产品系列,整个企业和其他利益集团。一个系统是为了实现一个或多个任务而存在。
环境决定了开发,操作,策略和其他影响系统的设置和条件。
任务是指系统为了实现对对象设置的使用或操作。
涉众是对于系统有利益关系或关注的个人,团队或组织。
架构的利益相关者
- 最终用户关心直觉,正确的行为,性能,可靠性,可用性,有效性和安全性。
- 系统管理员关注直觉行为,管理和辅助监测。
- 业务人员关注有竞争力的特性,市场的时效性,对于其他产品的定位和开销。
- 客户关注开销,稳定性和计划性。
- 开发者关注清晰的需求和简单而一致的设计方法。
- 项目经理关注追踪项目,计划,资源的生产使用和预算的可预见性。
- 维护人员关注易理解性,一致性,和文档化的设计方法,与易修改性。
运用4+1视图方法

-
逻辑视图关注功能,不仅包括用户可见的功能,还包括为实现用户功能而必须提供的"辅助功能模块";它们可能是逻辑层、功能模块等。
-
开发视图关注程序包,不仅包括要编写的源程序,还包括可以直接使用的第三方SDK和现成框架、类库,以及开发的系统将运行于其上的系统软件或中间件。开发视图和逻辑视图之间可能存在一定的映射关系:比如逻辑层一般会映射到多个程序包等。
-
处理视图关注进程、线程、对象等运行时概念,以及相关的并发、同步、通信等问题。处理视图和开发视图的关系:开发视图一般偏重程序包在编译时期的静态依赖关系,而这些程序运行起来之后会表现为对象、线程、进程,处理视图比较关注的正是这些运行时单元的交互问题。
-
物理视图关注"目标程序及其依赖的运行库和系统软件"最终如何安装或部署到物理机器,以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。物理视图和处理视图的关系:处理视图特别关注目标程序的动态执行情况,而物理视图重视目标程序的静态位置问题;物理视图是综合考虑软件系统和整个IT系统相互影响的架构视图。
开放组架构框架TOGAF
开放组架构框架,简称为 TOGAF ,这是一个由 The Open Group 组织创建的企业架构框架标准。该标准是一个方法论,包括一套流程、原则、指南、最佳实践、技术、角色和工件。它用于开发和治理企业架构,妥善处理业务需求。
企业架构,一般包括业务架构(流程、组织)、应用架构(应用、服务)、数据架构(数据、信息)和技术架构(硬件、网络)这几方面内容:

ADM由一系列体系结构域组成,这些阶段可使架构师确保充分解决复杂的需求集。ADM的基本结构如下:

迭代0:搭建完整环境
完成概念验证(PoC)之后,迭代0为项目技术准备工作,基本事项有:
- 创建应用脚手架
- 创建项目的代码库
- 搭建持续集成,持续交付环境,如Jenkins
- 进行各种权限配置,如各种不同环境账号准备、开发人员git账号
- 配置配套的工具和第三方平台,如微信开发者账号申请
- 更细粒度的技术选型
- 内部技术培训及规范化文档约定
- 第一次测试环境的部署
README文档
- 支持运行的环境
- 必要的依赖准备,以及如何搭建
- 项目的安装指南
- 线上的示例或最后的运行环境
- 相关的文档链接
- 相关人员的联系方式,讨论群
- 更新历史记录
提交文档化
- feat: 表示新增了一个功能
- fix: 表示修复了一个 bug
- docs: 表示只修改了文档
- style: 表示修改格式、书写错误、空格等不影响代码逻辑的操作
- refactor: 表示修改的代码不是新增功能也不是修改 bug,比如代码重构
- perf: 表示修改了提升性能的代码
- test: 表示修改了测试代码
- build: 表示修改了编译配置文件
- chore: 无 src 或 test 的操作
- revert: 回滚操作
前端框架选型考虑
- 团队成员能否快速掌握该框架
- 框架的生态是否丰富
- 不同框架对于不同浏览器的支持程度如何
- 框架的后期维护成本和难度如何
- 是否能以最小的代价迁移现有的应用
设计原理
- 亲密性:即将相关的项(组件)组织到一起
- 对齐:每一项都应当与页面上的内容存在某种视觉联系
- 重复:重复元素以体现一致性
- 对比:对比产生强调,以强调产生强烈的反差
BFF
BFF,Backends For Frontends(服务于前端的后端)使用目的:
- 应对多端应用
- 聚合后端微服务
- 代理第三方API
- 遗留系统的微服务改造
名词解释
概念验证 PoC
概念验证(英语:Proof of concept,简称POC)是对某些想法的一个较短而不完整的实现,以证明其可行性,示范其原理,其目的是为了验证一些概念或理论。概念验证通常被认为是一个有里程碑意义的实现的原型 。
代码异味 Code Smell
程序开发领域,代码中的任何可能导致深层次问题的症状都可以叫做代码异味(Code smell)。常见的代码异味:
- 代码重复: 相同或者相似的代码存在于一个以上的地方。
- 长方法: 一个非常长的方法、函数或者过程。
- 巨类: 一个非常庞大的类。
- 太多的参数: 函数或者过程的冗长的参数列表使得代码可读性和质量非常差。
- 特性依恋: 一个类过度的使用另一个类的方法。
- 亲密关系: 一个类依赖另一个类的实现细节。
- 拒绝继承: 子类以一种‘拒绝’的态度,覆盖基类中的方法,换句话说,子类不想继承父类中的方法,参考里氏替换原则。
- 冗余类 / 寄生虫: 一个功能太少的类。
- 人为的复杂: 在简单设计已经满足需求的时候,强迫使用极度复杂的设计模式。
- 超长标识符: 尤其,在软件工程中,应该毫无保留的使用命名规则来消除歧义。
- 超短标识符: 除非很明显,一个变量名应该反映它的功用。
- 过度使用字面值: 为提高可读性和避免编码错误,应该使用命名常量。此外,字面值可以且应该在可能的情况下,独立存放于资源文件或者脚本中,在软件部署到不同区域时,可以很方便的本地化。
工作坊Workshop
工作坊是一个以练习为主,以理论为辅的掌握新技术的方式,需要参与者带着自己的电脑。 Bootcamp是与工作坊相似的练习事件。它适用于复杂、抽象的技术,如面向对象和设计模式。