【架构基础】简单设计原则
简单设计来源于极限编程(ExtremeProgramming,简称XP)。XP是由KentBeck在1996年提出的,是一种软件工程方法学,是敏捷软件开发中最富有成效的几种方法学之一。XP存在四个核心实践:TDD(Test-Driven Development)、重构(Refactoring)、简单设计(Simple Design)、结对编程(Pair Programming)。
简单设计四原则:
1 通过所有测试(Passes its tests)
2 尽可能消除重复(Minimizes duplication)
3 尽可能清晰表达(Maximizes clarity)
4 更少的代码元素(Has fewer elememts)
以上四个原则的重要程度依次降低。
简单设计原则初看平淡无奇,然而慢慢品味,实则大道至简:
通过所有测试,即功能的正确性,意味着我们开发的功能必须满足客户的需求。该原则隐含设计人员与客户沟通的重要性,保证原始需求与代码的设计、实现一致。
尽可能地消除重复,是对代码质量提出的要求。可扩展性是软件质量的八大属性之一,而重复是万恶之源(root of all evils),重复严重影响代码的可扩展性。
尽可能地清晰表达,清晰表达的代码,可以增加代码的可维护性。在宏观层面上,可以通过统一语言(Ubiquitous Language,来源于《领域驱动设计:软件核心复杂性应对之道》),实现业务人员、架构人员、开发人员、测试人员之间的需求传递;在微观层面上,通过引入DSL(领域特点语言,Domain Specific Language),函数名称自注释,引入解释性变量等方法,实现更易于理解的代码。
更少的代码元素,如无必要,勿增元素。它告诫我们避免为了迎合未来可能不存在的变化,落入过度设计的陷阱。在满足客户需求的基础上,只要功能代码做到了最小重复和清晰表达,就要避免进一步拆分或提取类、方法和变量。
最后一句话非常重要,它明确指出了以上四个原则的优先级关系。首先,保证功能正确性;其次,减少代码重复;再次,提升代码可理解性。若已满足了这三点要求,就不必过度设计,新增代码元素。正如曾国藩所言“物来顺应,未来不迎,当时不杂,既往不恋”。
【架构基础】简单设计原则相关推荐
- 领域驱动设计架构概述与设计原则
参考原文链接:https://blog.csdn.net/baidu_24237655/article/details/104312052 有删减 目前市面常用的两套分布式系统框架 1.zookeep ...
- 设计模式基础篇:设计原则
设计模式基础篇之设计原则 概述 开闭原则 定义 作用 实现方法 里氏替换原则 定义 作用 实现方法 依赖倒置原则 定义 作用 实现方法 单一职责原则 定义 作用 实现方法 接口隔离原则 定义 作用 实 ...
- activiti7流程设计器_基于容器和微服务应用的架构:容器设计原则
微服务提供了巨大的好处,但也带来了巨大的新挑战.在创建基于微服务的应用程序时,微服务体系结构模式是最基本的支柱. 在本指南的前面,您学习了关于容器和Docker的基本概念.这是开始使用容器所需的最低信 ...
- 架构中的设计原则之单一职责原则 - 《java开发技术-在架构中体验设计模式和算法之美》...
2019独角兽企业重金招聘Python工程师标准>>> 单一职责模式: 单一职责原则的核心思想就是:系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成. ...
- 架构师内功心法之设计原则
一.架构师内功心法之设计原则 1.为什么要学习软件架构设计原则 1.1.课程目标 通过对节课内容的学习,了解设计原则的重要性. 掌握七大设计原则的具体内容. 1.2.内容定位 学习设计原则,学习设计模 ...
- 代码的简单设计五原则
欢欢:"你看我的代码用了策略模式和状态模式,假如后面客户会有这样的需求,可以无缝扩展,多么健壮!" 清扬一脸狐疑,心中念叨了数遍 :"哼,过度设计!",只见她欲 ...
- 设计模式的分类和六大设计原则
学习设计模式我是大学研究<java与模式这本书>1024页,很多没有看懂,并且没有总结起来,这次一定要把设计原则和设计模式总结清楚. 设计模式的分类 设计模式分为三大类: 创建型模式,共五 ...
- 一文详解微服务架构的数据设计
微服务是一个软件架构模式,对微服务的讨论大多集中在容器或其他技术是否能很好的实施微服务这些方面. 本文将从以下几个角度来和大家分享在微服务架构下进行数据设计需要关注的地方,旨在帮助大家在构建微服务架构 ...
- 设计模式 - 七大设计原则(一)
设计模式 - 七大设计原则(一) 概述 简单介绍一下七大设计原则: 开闭原则:是所有面向对象设计的核心,对扩展开放,对修改关闭 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体 单一职责原则:一个 ...
最新文章
- springboot rocket 多个生产者_RabbiMQ原理与SpringBoot使用
- Ubuntu 16.04 下 Vim安装
- SAP UI5 ConnectionManager - drives initialization of odata model
- tensorrt轻松部署高性能dnn推理_部署环境之:tensorRT的插件
- thinkphp 3 升到 thinkphp 5 或更高 ( 资料收集)
- API Gateway——KONG简单入门
- 纵坐标是横的还是竖的_纠结地板是横铺还是竖铺好?别瞎折腾了,迎着光铺才是最正确的!...
- 数据资产管理:大数据时代的新风口
- ie浏览器开发者模式修改默认ie版本
- 台达触摸屏和vfd-m变频器通讯控制监视程序 使用modbus rtu通讯方式,在触摸屏可以直接控制变频器
- 量化金融笔记2-期货量化基础
- UTF-8与unicode的故事(转自某位我没找到的大牛)
- java使用网易企业邮箱,发送邮件失败
- 弱网测试NEWT-----Network Emulator for Windows Toolkit
- 微拍堂积极践行社会责任,促进中国经济高质量发展
- 【java】中文转拼音遇到的奇葩事件
- 十大经典Java手机游戏 Top Ten Best Java Mobile Games
- 哈工程转专业计算机,哈尔滨工业大学2020级转专业情况看冷热
- 无盘工作站(三)-配置 PXE 无盘站软件
- egg html模板,egg(35,36)--egg实现项目的静态模板
热门文章
- 数据分析如何入门?如何做职业规划?
- MySQL赋权报错:’the right syntax to use near ‘identified by ‘password‘ with grant option‘
- 聊聊 CSS 中的布局模式
- 如何看待目前的外贸形势
- 采用FPGA实现音频模数转换器
- 用jaxa写一个快递查询
- 国家开放大学计算机应用基础模块3客观题,国家开放大学《计算机应用基础》考试与答案形考任务模块3模块3Excel2010电子表格系统—客观题答案-20210603091413.docx-原创力文档...
- 屏蔽布线系统之热点问题
- 程序员想兼职却没有渠道?来看资深程序员在哪接单
- Python学习之——逻辑运算符