架构的级别
应用级别
架构最下层级别(lowest level)。只关注一个单一的应用。非常的关注细节,关注底层设计( Very detailed, low level design)。沟通往往只限于开发团队内部。
解决方案级别
架构的中间级别(mid-level)。关注的是一个或多个应用,从而满足某个业务需求 (业务解决方案)。有点高,但主要还是low-level设计。沟通跨多个开发团队。
企业级别
架构最高级别。关注多个解决方案(solution)。高级(High level), 抽象设计(abstract design), 需要总览全局,总览多个解决方案和多个应用架构师。沟通横跨整个组织。
协作价值 — 胶水粘合
水平,不同职能之间
垂直,开发和管理人员之间
不同技术或者项目之间的集成桥梁
几个典型的活动
架构是一个持续的活动,尤其在敏捷中,有些活动需要不断的重复。
确定和决定要使用的开发技术和平台
定义开发标准,比如编码标准,代码cr流程,测试方法,工具等
协助识别和理清业务需求
设计系统和基于需求做出决策
记录和沟通架构的定义,设计和决策
检查和评审架构和代码,比如检查确定的模式和标准
与其他架构师协作
开发人员的教练和顾问
细化高级别的设计具体到低级别的设计
需要掌握的重要技能
分类 | 拆解 | 推荐 | 备注 |
---|---|---|---|
设计 | 基础的设计模式 | 基础理论书籍 | |
对模式和反模式的一些钻研 | 企业级实践 | ||
质量度量 | 可维护,可靠,适应性好,安全,可测试,可扩展,可重用等 | ||
尝试了解不同技术栈,扩展技术面 | 了解怎么实现的, 实践过, 有领域深度 |
||
分析和了解框架中应用的设计模式,了解他是怎么做到的 | |||
保持好奇,参加各种技术聚会,增强自己的思维能力和扩大社交网络 | |||
决策 | 重要性评价 | 概念完整 统一性 |
|
优先级 | wsjf(weighted shortest job first)模型 | ||
知道自己的能力 | 只做自己职责内的事情,对别人的事情可以提建议,但不要做决策 | ||
评估多个选项 | 多个方案要有对比,也可以降低整体的风险性 | ||
简化 | 矫正解决方案 | ||
不要过度复杂,超出最初的问题 | |||
问题拆解为多个小问题(分治),保证可聚合 | |||
不断迭代优化整体方案(重构) | |||
代码 | 开发人员不接受你的建议 | ||
不会真实理解开发人员面临的挑战 | 1 参与到项目中,经验 = 所见 + 情感 + 假设 2 找到正确的事情去尝试,采用 (可以生产中使用),试验(可以在某个项目中尝试,风险可控),调研(探索下对公司有哪些影响),保留(谨慎使用) |
||
文档 | 代码是最好的文档 | 注释和设计合理 | |
是否可自动生成 | |||
尽可能简约 | |||
沟通 | 随时演讲,常见的问题放到大家能看到的地方 | ||
保持对外宣贯 | |||
学习怎么和别人沟通,要经常参加甚至主持会议 | UZMO — Thinking With Your Pen | ||
确定沟通人群的级别,不同级别的人确定不同的内容 | |||
增加沟通频率,让在一线的人也经常分享自己的经验,心得 | |||
信息拉平,让大家都知道前因后果, | |||
估算和评估 | 项目管理,基本原则 | 可以了解下敏捷中的估算方法,比如标准的用户故事 | |
评估未知架构 | 1 设计实践 2 开发实践,指引手册,代码版本管理,部署怎么分布的 3 质量保障,谁来审核 4 安全 |
||
权衡 | 质量和速度不可能同时满足 | ||
矛盾目标,当下还是长远 | |||
冲突管理 | Schulze von Thun的四眼模型( “Four-Ears Model” of Schulze von Thun) | ||
顾问和教练 | 有远见,设立里程碑 | 为每个里程碑确定基本的节奏,资源 | |
构建实践社区 | 在一个专题上,经常邀请一些朋友,分享想法,统一想法,头脑风暴 | ||
公开讨论 | 任何事情都可以公开讨论,让大家对一个事情形成充分的了解 | ||
营销 | 为点子或者产品说服别人 | ||
坚持自己的观点,一直努力 | |||
找到自己的同盟,比如圈子,比如同事,被谁支持 | |||
重复它,久了大家就会认可 |