随笔分类 - 2设计札记
探索软件系统的设计方法与实践。
摘要:编程即设计,代码即架构。架构,致力于以更小成本、更高质量地实现所需服务。架构,是兼顾质量与成本的魔法。 但架构并不研究如何实现具体功能或服务,—— 它研究的是如何妥善安置那些实现服务的构件,管理依赖、边界和变化。
阅读全文
摘要:抽象与分层,是计算与程序世界里最根本的思想。逻辑之始。抽象与分层能力,是程序员的内功心法。能够细致思考抽象与分层的开发人员,做出的设计和写出的代码往往更加简洁优雅。本文从代码中提炼了许多表达通用抽象语义的词汇,可以作为设计、开发和交流的指引,同时通过案例说明了抽象缺失和分层缺失导致的后果。
阅读全文
摘要:API 是服务提供的接口抽象。 一旦公开,收回来会非常困难而且费力。因此,设计API 要精思细虑,严格把关每个入参字段、继承层次不要超过两次、充分考虑使用者体验、避免参数混杂、避免暴漏实现细节等问题。
阅读全文
摘要:本文讨论了三种按钮逻辑配置化的可选方案: 重量级的Groovy脚本方案、轻量级的规则引擎方案、超轻量级的条件匹配表达式方案,重点讲解了条件匹配表达式方案。按钮逻辑实现采用了“组合模式”,解析配置采用了“策略模式”和“工厂模式”。
阅读全文
摘要:业务模式是对业务规则和流程的常见相似性、以及特定业务的数据处理能力的提炼,是业务应用系统中的常见套路。掌握这些套路,有助于更快更好地设计与实现业务。
阅读全文
摘要:存储设计是软件开发的基石,是软件详细设计中的关键环节。存储设计基本决定了应用的数据质量和业务支撑能力。
阅读全文
摘要:架构模式是系统组件及组件交互的模式,决定了处理数据和领域对象的全局控制结构。组件化是使用架构模式的前提。
阅读全文
摘要:本文讨论构建软件可采用的应用模型。应用模型涉及到数据处理的全局流程和交互方式。 我所接触过的,主要有“请求-响应模型”、“流处理模型”、“分布式模型”、“人机交互模型”。
阅读全文
摘要:将整个系统划分为若干正交的紧密关联的子系统,以及高内聚低耦合的小而美的模块与微服务,理清职责、交互与边界。划分的基本原则是“识别、分离和组合关注点”。
阅读全文
摘要:在 “软件设计要素初探” 一文,尝试从软件设计的整体角度,综合讨论了软件设计的各种要素。本文主要探讨一些稍小的设计子主题:错误处理、结构性难题、整体与兼容、设计取舍、设计与重构、设计与质量、设计与细节、维护与扩展、测量技术。
阅读全文
摘要:领域建模是软件设计的初始点。 反复追溯事物的本质“是什么”,从不同视角去理解事物的性质,理解事物之间的关联,梳理事物与活动的流程与环节,抽象出实体与关联,规则与约束。领域建模最核心的部分是:定义自身的定位,定义基础要素,定义完备的能力集合。
阅读全文
摘要:设计模式是实现特定需求的接近代码层面的设计套路,通常用于梳理和表达对象之间较为复杂的依赖和交互关系,将错综复杂的容易膨胀的难以理解和扩展的条件判断逻辑解开成一系列对象的清晰可理解的易扩展的交互结构。每个设计模式都有某个关注点,而这些关注点是相互协作的;具有协作关系的模式也是可以组合的。
阅读全文
摘要:本文讲解了通过观察者模式来实现配置动态更新实时推送的基本原理和实现。观察者模式是解耦变化与关联变化的设计结构,即:当一个对象的某个状态变化后,需要通知关注该对象该状态的所有对象。
阅读全文
摘要:使用IntelljIDEA生成接口的类继承层次图,并给出一个装饰器模式的例子。
阅读全文
摘要:一些初始设计在常见场景下并不存在问题,但是在大压力场景下会给系统稳定性带来隐患,这一点日后切要注意; 另外,做系统局部优化时,也要全局考虑,避免因为优化A又引入了新的甚至威胁更大的问题。
阅读全文
摘要:前瞻性思考;根本性解决方案;不要兼容老方案;建立良好约定;首尾呼应。
阅读全文
摘要:通过一个实际的例子阐述了基于接口设计与编程的缘由。主要场景是:1. 需要从系统中提炼出更通用的系统; 2. 需要从老系统重构出新的系统而不需要做“剧烈的变更”;3. 使方法具备更通用的能力。基于接口编程有三个实际层面:基于Interface编程;基于泛型接口编程; 基于Function编程。基于接口设计与编程,可以使系统更加清晰而容易扩展和变更。
阅读全文
摘要:软件的构造,本质上就是组件与组合。组件是实现了特定功能的逻辑单元(程序),组合则是将“小组件集成为大组件,将大组件集成为整个应用系统”的联结方式。只要学过编程语言的人,大抵是会构造或大或小的组件的,那么组合结构就决定了程序是如何构成或优雅或拙劣的软件的。本文想探讨下软件是如何组合起来的。
阅读全文
摘要:设计,是“需求上升到机制”的过程和结果。不是针对一个需求,而是设计一种机制,容纳和集成一类相似需求。基于需求,超越需求。
阅读全文