《设计模式解析(第2版•修订版)》—第1章 1.2节面向对象范型之前:功能分解

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 让我们从对一种常用的软件开发方法的考察开始吧。如果给你一个任务,要编写一段代码,访问在数据库中存储的形状描述然后显示出来。按照所需要的步骤来思考,是一种很自然的选择。

本节书摘来自异步社区《设计模式解析(第2版•修订版)》一书中的第1章,第1.2节面向对象范型之前:功能分解,作者【美】Alan Shalloway(艾伦•沙洛维) , James R.Trott(詹姆斯•R.特罗特),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 面向对象范型之前:功能分解
设计模式解析(第2版•修订版)
功能分解是一种处理复杂问题的自然方法

让我们从对一种常用的软件开发方法的考察开始吧。如果给你一个任务,要编写一段代码,访问在数据库中存储的形状描述然后显示出来。按照所需要的步骤来思考,是一种很自然的选择。比如,你可能认为应该按照以下步骤解决这个问题。

1.在数据库中找到形状列表。

2.打开形状列表。

3.按某种规则将列表排序。

4.在显示器上显示各个形状。

还可以选取以上任意一个步骤,进一步分解成实现所必需的若干步。例如,可以将步骤4分解。对于列表中所有形状,都可以按照以下步骤进行。

4a. 识别形状的类型。

4b. 获取形状的位置。

4c. 以形状的位置作为参数,调用显示形状的函数。

这种方法就称为“功能分解”,因为分析人员将问题分解成了多个功能步骤(这些步骤就构成了这个问题)。你我都会这样做,因为解决更小的问题,比解决整个问题更简单。这种方法与我写制作意大利肉末番茄烤面条的烹饪过程,或者装配自行车指南所用的方法是一样的。这种方法我们使用得如此驾轻就熟,以至于我们很少对它有所怀疑,或者自问是否还有其他的选择。

这种方法的挑战:能者多责

功能分解方法的一个问题在于,它通常会导致让一个“主”程序负责控制子程序,这是将功能分解为多个子功能的自然结果。但是,主程序所承受的责任太多了:要确保一切正确工作,还要协调各函数并控制它们的先后顺序,因此经常会产生非常复杂的代码。如果让一些子函数负责自己的行为,而且能够告知主函数执行某些任务,并信任它知道如何执行,这种方式比功能分解的方式要容易得多。叱咤疆场的将军和家庭中成功的父母对这种经验都了然于胸。现在,程序员也学会了,这就是所谓委托(delegation)。

这种方法的难题:应对变化

功能分解方法的另一个问题在于,它在为未来可能出现的变化未雨绸缪方面,在对代码合适地改进方面,都于事无补。变化是无法避免的,经常是因为要为已有的主题增加新的变体。例如,我可能不得不处理新的形状,或者需要显示形状的新方法。如果将实现各步骤的所有逻辑代码都放在一个大函数或大模块中的话,那么这些步骤的任何实质性变化,都必须对这个函数或模块进行修改。

而且变化还会为bug和意料之外的结果创造机会。或者,像我喜欢说的:

许多bug都源于代码修改。

自己去验证这句断言吧。考虑这样的情景:想对代码进行修改,但又害怕这样做,因为你知道修改一个地方的代码可能会破坏其他地方。怎么会出现这种情形呢?代码非要关注所有函数和使用它们的方式吗?函数应该怎样和另一个函数交互呢?函数要关注的细节是否太多了,比如要实现的逻辑、要交互的东西、要使用的数据?和人一样,如果程序试图同时关注过多的东西,一旦有变化出现,就只能坐等bug来到。程序设计可是一种复杂、抽象和动态的活动啊。

而且,无论多么努力工作,无论分析做得多么好,也是永远无法从用户那里获得所有需求的,因为关于未来有太多未知,万物皆变化。不是吗,它们总是在变化之中……

对于阻止变化,我们无计可施。但是我们对变化本身却并非无能为力。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
5天前
|
数据可视化 数据挖掘 BI
团队管理者必读:高效看板类协同软件的功能解析
在现代职场中,团队协作的效率直接影响项目成败。看板类协同软件通过可视化界面,帮助团队清晰规划任务、追踪进度,提高协作效率。本文介绍看板类软件的优势,并推荐五款优质工具:板栗看板、Trello、Monday.com、ClickUp 和 Asana,助力团队实现高效管理。
26 2
|
1月前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
119 60
|
18天前
|
存储 安全 数据安全/隐私保护
深入解析iOS 14隐私保护功能:用户数据安全的新里程碑
随着数字时代的到来,个人隐私保护成为全球关注的焦点。苹果公司在最新的iOS 14系统中引入了一系列创新的隐私保护功能,旨在为用户提供更透明的数据使用信息和更强的控制权。本文将深入探讨iOS 14中的几项关键隐私功能,包括App跟踪透明性、简化的隐私设置以及增强的系统安全性,分析它们如何共同作用以提升用户的隐私保护水平。
61 3
|
1天前
|
小程序 安全 搜索推荐
陪玩小程序的搭建解析与功能需求
陪玩小程序是为玩家提供专业陪玩服务的应用,嵌入社交或游戏平台,具备智能匹配、实时聊天、预约服务等功能,支持便捷高效的游戏体验。源码交付时需提供详细文档、技术支持及定制开发服务,确保客户能顺利维护和升级。选择陪玩小程序时应关注功能需求、用户体验、安全性和成本效益,以确保最佳使用效果。
18 0
|
26天前
|
机器学习/深度学习 存储 人工智能
政务部门人工智能OCR智能化升级:3大技术架构与4项核心功能解析
本项目针对政务服务数字化需求,建设智能文档处理平台,利用OCR、信息抽取和深度学习技术,实现文件自动解析、分类、比对与审核,提升效率与准确性。平台强调本地部署,确保数据安全,解决低质量扫描件、复杂表格等痛点,降低人工成本与错误率,助力智慧政务发展。
|
2月前
|
设计模式 PHP 开发者
PHP中的设计模式:桥接模式的解析与应用
在软件开发的浩瀚海洋中,设计模式如同灯塔一般,为开发者们指引方向。本文将深入探讨PHP中的一种重要设计模式——桥接模式。桥接模式巧妙地将抽象与实现分离,通过封装一个抽象的接口,使得实现和抽象可以独立变化。本文将阐述桥接模式的定义、结构、优缺点及其应用场景,并通过具体的PHP示例代码展示如何在实际项目中灵活运用这一设计模式。让我们一起走进桥接模式的世界,感受它的魅力所在。
|
1月前
|
供应链 安全 BI
CRM系统功能深度解析:为何这些平台排名靠前
本文深入解析了市场上排名靠前的CRM系统,如纷享销客、用友CRM、金蝶CRM、红圈CRM和销帮帮CRM,探讨了它们在功能性、用户体验、集成能力、数据安全和客户支持等方面的优势,以及如何满足企业的关键需求,助力企业实现数字化转型和业务增长。
|
1月前
|
数据管理 Nacos 开发者
"Nacos架构深度解析:一篇文章带你掌握业务层四大核心功能,服务注册、配置管理、元数据与健康检查一网打尽!"
【10月更文挑战第23天】Nacos 是一个用于服务注册发现和配置管理的平台,支持动态服务发现、配置管理、元数据管理和健康检查。其业务层包括服务注册与发现、配置管理、元数据管理和健康检查四大核心功能。通过示例代码展示了如何在业务层中使用Nacos,帮助开发者构建高可用、动态扩展的微服务生态系统。
104 0
|
2月前
|
Web App开发 存储 前端开发
前端开发必备:requestAnimationFrame、setInterval、setTimeout——功能解析与优劣对比
前端开发必备:requestAnimationFrame、setInterval、setTimeout——功能解析与优劣对比
176 0

推荐镜像

更多
下一篇
DataWorks