使用 Graphviz 绘画 UML 图
能自动排布节点位置,在大型复杂的图特别方便。 3. 统一文档风格。 实际上,文档生成工具Doxygen 也是采用 Graphviz 生成类图的。不过,我们在软件设计中, 经常以类图表示系统中某个部分,并且按需展示某些重点,而不是简单地全部列出,所以还是 需要手工去描述我们想要画什么,表示我们的软件设计。 1.1 使用 Graphviz dot 首先,下载 Graphviz 安装包。macOS 用户可以 brew install headlabel="* "] Canvas -> Shape 15 } } Canvas Shape * Rectangle Circle 2.9 颜色 UML 图也不一定是黑白的。做软件设计时可以加入颜色去加入一些意思,例如不同包的类可 设置为不同颜色。挑选颜色是一个头痛的问题,可以采用 Graphviz 的配色方案(color scheme) 功能。例如用 colorscheme=spectral70 码力 | 20 页 | 331.51 KB | 1 年前3
成都敏捷之旅十周年/1_熊节_敏捷中国史_敏捷之旅成都开发费用超支、软件团队沟通困难、软件重用率低下、 开发人员各自为政、任务完成过期、可靠性下降、系统 适应能力差、软件质量得不到保证、维护困难、可移植 性差、文档不健全、不能适应需求变化…… 当时专家的共识:中国软件设计与生产的弊端在于技术 环节不过关,社会化大生产尚未形成。而应对软件危机 的对策,则是亟需提高全行业的软件工程水平。 �7 在客户和解决客户需求 的软件项目之间,建立 对客户需求的共同理解。 需求管理 每当有人向团队主干版本提交新的修 改,立即执行完整的软件构建过程,将 源代码编译、打包成可执行的状态,并 执行所有自动化测试用例。 敏捷的质量保证 重构应该是“行为保持”的。为了 最大限度地减少调整软件设计过程 中引入错误的几率,必须采用“一 种经千锤百炼形成的有条不紊的程 序整理方法”。 如果每次重构之后都必须手动执行 测试用例来验证软件的行为是否被 改变,会使重构变成一件极其麻烦 而高风险的事。因此,极限编程有0 码力 | 38 页 | 6.01 MB | 1 年前3
领域驱动设计&中台/如何让DDD落地从2003年年由Eric Evans提出DDD以后,在软件开发领域⼀一直 都是雷雷声⼤大,⾬雨点⼩小。这⼏几年年之所以开始⽕火起来,主要的功 劳也要给队友“微服务”,那么这是为什什么呢? DDD的⽬目标是什什么 软件设计的⻔门槛是什什么 DDD⾥里里难懂的概念 谁来做领域专家? 产品经理 技术组长 架构师 系统分析师 如何从需求到DDD? 我想要⼀一个电商 平台,我可以在 上⾯面卖东⻄西 ? Event0 码力 | 32 页 | 3.25 MB | 1 年前3
敏捷开发/张燎原:从持续交付到业务创新践者和推动者,具有十多年软件研发一线实践经验,经 历过消费电子、通信及互联网多个行业,长期从事研发 管理及研发教练工作,负责组织级大规模敏捷导入实施 和转型的辅导。译有《程序员度量》、《软件驱魔》等。 同时,他热衷编写代码和开源,涉及软件设计、测试驱 动开发、代码重构、遗留代码的维护和持续集成及交 付。 twitter: @zhangliaoyuan 知识倍增速度: • 1750 - 1900: 150年年增⻓长⼀一倍 • 19000 码力 | 40 页 | 3.34 MB | 1 年前3
Go语言基础
Golang Fundaments接口赋予程序结构。 – 接口鼓励通过组合进行设计。 – 接口使得并强制清晰划分组件职责。 – 接口的标准化可以建立清晰和一致的期望。 • 面向包的设计(Package-Oriented Design) • 并发软件设计(Concurrent Software Design) • 管道设计(Channel Design) Golang-设计哲学 • 实用主义的语言风格 – 面向编译器的静态类型语言 • 数据类型必须在编译阶段确定0 码力 | 21 页 | 851.30 KB | 1 年前3
敏捷开发/LIVE-211是什么,聊聊研发效能度量那些事儿践者和推动者,具有十多年软件研发一线实践经验,经 历过消费电子、通信及互联网多个行业,长期从事研发 管理及研发教练工作,负责组织级大规模敏捷导入实施 和转型的辅导。译有《程序员度量》、《软件驱魔》等。 同时,他热衷编写代码和开源,涉及软件设计、测试驱 动开发、代码重构、遗留代码的维护和持续集成及交付。 twitter: @zhangliaoyuan Content 好的度量是什么 What’s Good Metrics0 码力 | 36 页 | 7.19 MB | 1 年前3
2022年美团技术年货 合辑计模式知识,完成了活动模型的重构 后端 < 669 和迭代。 “老师,我已经能做到自主分析功能特点,并合理应用设计模式去完成程序设计和代 码重构了,实在太感谢您了。” “设计模式作为一种软件设计的最佳实践,你已经很好地理解并应用于实践了,非常 不错。但学海无涯,还需持续精进!” 结语 本文以三个实际场景为出发点,借助小明和老师两个虚拟的人物,试图以一种较为诙 谐的“对话”方式来讲 们在实际应用的时候总是要面临各种 现实问题的挑战。柏拉图曾对人生的终极问题做了定义:我是谁?我来自哪里?我将 要到哪里去?这些问题延续至今,一直困扰着人们人类。而软件工程也向工程师门提 出了软件设计的终极问题:什么是抽象层次?什么颗粒度?以及如何应对变化? 后端 < 999 所以,组装式开发的历史坎坷崎岖,更难的是在每个技术领域这些问题的答案还都不 一样。比如在颗粒度的问题上,组件的颗粒度到底要多大,颗粒度越大,被修改的风 4.3 变化应对之可变性建模 通过将功能组件组织成一个个活动图,每个活动图负责解决一个系列的产品功能展示 信息组装问题,此时的组件颗粒度还是较大的。组件颗粒度大的问题在于,容易不稳 定,从软件设计的角度来看,是因为变化的因素太多。比如在组装展示模型环节,展 示模型组装组件负责将数据组装成发给前端的展示模型,实际业务场景中不同情况对 于同一个展示字段的组装存在不同的拼接策略,我们拿开篇的例子来讲解:0 码力 | 1356 页 | 45.90 MB | 1 年前3
FISCO BCOS 2.9.0 中文文档单点把 控,“善意推测”在这个领域已经不尽适用,整个世界步步惊心,处处冷箭, 只能通过周密的算法和繁杂的流程维系共识和安全,简而言之,没有经过验 证的信息,一个字节都不能相信。 比起单一环境里的软件设计,区块链领域的设计思路确实存在颠覆性,开发 者要从“做功能,只容错,不防骗”的思维模式里跳出来,带着“怀疑一切”的 态度进行设计。 开发者在面向区块链领域时,不能只是思考怎么实现一个功能,而更要去思 遵循依赖关系原则,即开发者在进行开发时需要考虑智能合约的『可测试 性』。例如,假设测试代码完全使用SDK编写,那智能合约的修改就可能导 致测试代码需要做出对应变更,这会对测试效果造成影响,提升测试成本。 基于软件设计『不可依赖多变部分』的原则,可测试性同样不能依赖于多变 部分。 为了解决上述问题,我们在智能合约层引入测试代码。这些代码仅被设计为 测试组件,不会发布到线上环境,以此将测试案例改动影响解耦并封装到智 所欲,开发者读懂了ABI描 述,基本就能全面理解一个合约的输入输出,和合约毫无障碍地对话,这 种“面向远程接口编程”的思想,很类似WSDL、IDL、ACE、ProtoBuffer和 gRPC等经典软件设计。 事实上,整个SDK中最繁琐的是ABI编解码部分,为了兼容EVM,FISCO BCOS在交易处理时沿用了ABI编码,以及兼容RLP协议。 ABI、RLP制定了严格的规范,对基础数据类型、数组和变长数据、函数方0 码力 | 2649 页 | 201.08 MB | 1 年前3
FISCO BCOS 2.7.2 中文文档单点把 控,“善意推测”在这个领域已经不尽适用,整个世界步步惊心,处处冷箭, 只能通过周密的算法和繁杂的流程维系共识和安全,简而言之,没有经过验 证的信息,一个字节都不能相信。 比起单一环境里的软件设计,区块链领域的设计思路确实存在颠覆性,开发 者要从“做功能,只容错,不防骗”的思维模式里跳出来,带着“怀疑一切”的 态度进行设计。 开发者在面向区块链领域时,不能只是思考怎么实现一个功能,而更要去思 遵循依赖关系原则,即开发者在进行开发时需要考虑智能合约的『可测试 性』。例如,假设测试代码完全使用SDK编写,那智能合约的修改就可能导 致测试代码需要做出对应变更,这会对测试效果造成影响,提升测试成本。 基于软件设计『不可依赖多变部分』的原则,可测试性同样不能依赖于多变 部分。 为了解决上述问题,我们在智能合约层引入测试代码。这些代码仅被设计为 测试组件,不会发布到线上环境,以此将测试案例改动影响解耦并封装到智 所欲,开发者读懂了ABI描 述,基本就能全面理解一个合约的输入输出,和合约毫无障碍地对话,这 种“面向远程接口编程”的思想,很类似WSDL、IDL、ACE、ProtoBuffer和 gRPC等经典软件设计。 事实上,整个SDK中最繁琐的是ABI编解码部分,为了兼容EVM,FISCO BCOS在交易处理时沿用了ABI编码,以及兼容RLP协议。 ABI、RLP制定了严格的规范,对基础数据类型、数组和变长数据、函数方0 码力 | 2520 页 | 211.87 MB | 1 年前3
FISCO BCOS 2.8.0 中文文档单点把 控,“善意推测”在这个领域已经不尽适用,整个世界步步惊心,处处冷箭, 只能通过周密的算法和繁杂的流程维系共识和安全,简而言之,没有经过验 证的信息,一个字节都不能相信。 比起单一环境里的软件设计,区块链领域的设计思路确实存在颠覆性,开发 者要从“做功能,只容错,不防骗”的思维模式里跳出来,带着“怀疑一切”的 态度进行设计。 开发者在面向区块链领域时,不能只是思考怎么实现一个功能,而更要去思 遵循依赖关系原则,即开发者在进行开发时需要考虑智能合约的『可测试 性』。例如,假设测试代码完全使用SDK编写,那智能合约的修改就可能导 致测试代码需要做出对应变更,这会对测试效果造成影响,提升测试成本。 基于软件设计『不可依赖多变部分』的原则,可测试性同样不能依赖于多变 部分。 为了解决上述问题,我们在智能合约层引入测试代码。这些代码仅被设计为 测试组件,不会发布到线上环境,以此将测试案例改动影响解耦并封装到智 所欲,开发者读懂了ABI描 述,基本就能全面理解一个合约的输入输出,和合约毫无障碍地对话,这 种“面向远程接口编程”的思想,很类似WSDL、IDL、ACE、ProtoBuffer和 gRPC等经典软件设计。 事实上,整个SDK中最繁琐的是ABI编解码部分,为了兼容EVM,FISCO BCOS在交易处理时沿用了ABI编码,以及兼容RLP协议。 ABI、RLP制定了严格的规范,对基础数据类型、数组和变长数据、函数方0 码力 | 2534 页 | 212.43 MB | 1 年前3
共 28 条
- 1
- 2
- 3













