在代码中封装变化

软件开发是一种独特的人类活动,但与其他活动,如:数学、写作和工程等相似。我认为编写软件是一个建模过程,但是,与在空间中建模物理事物不同,我们建模的是在时间中发生的过程。因此,编写软件是一个创建模型的过程,这些模型是准确的和可理解的。

事实证明,我们可以通过多种方式在软件中建模过程。我们可以将过程建模为一组指令或过程。我们可以通过交互对象的集合对它们进行建模。我们甚至可以将流程建模为一系列转换过程。而不同的过程需要不同类型的描述。

我们构建软件的方式千差万别,因为我们解决了各种各样的问题。这就是为什么我们有不同的编程语言、框架和平台。没有什么是放之四海而皆准的。

几乎每个行业都在使用软件来解决各种各样的问题,所以软件行业本身就有很多方面的问题也就不足为奇了。我们专门研究语言和框架,以及不同的技术,但除此之外,我们还必须有一些共同的主线将我们联系在一起——对软件开发本身的共同理解。我觉得这在我们的行业中太常见了。看起来,我们的目标通常只是做一些有用的事情,然后在不太考虑其可支持性的情况下发布它。最终的结果是,我们在走捷径,而我们正在编写的代码并不像它所能达到的那样。这增加了维护软件的成本,使其难以扩展。

面向对象编程的一个主要好处是,它允许我们构建封装的、模块化的组件,这些组件是可独立测试和可升级的。然而,我很少看到开发人员使用面向对象的语言来构建具有这些优势的软件。它们不是根据需要注入依赖项,而是内联地实例化依赖项,结果是它们不能独立地进行测试。

在面向对象的系统中,行为应该封装在对象中,以限制副作用并允许创建更模块化的系统。

代码应该具有表现力,就像好的文学作品一样。代码应该清楚明了地表达它的功能和功能。软件应该以领域语言表示,并封装在对象中,以便它们更易于维护。

通过传播知识的系统交互对象的集合,我们尽量减少变化的影响,当变化真正发生时,因为改变通常只影响直接参与改变系统的对象,其余部分将封装和屏蔽的变化。这很好,因为它使向现有软件添加新特性的影响变得最小化。

软件生命周期很重要。我们在发布前只花了20%的预算,在软件最初发布后只花了80%的预算。其中不到三分之一是维护。剩下的就是修复缺陷并提供增强功能。在我们的行业中,我们基本上是在构建不可维护的软件,这是常态。

可更改的软件创建起来并没有那么难。将概念放入它们自己封装的实体中确实需要更多的类型,但是它也简化了测试。理想情况下,我们希望通过应用一系列我们可以独立测试和验证的简单行为来产生复杂的行为。

本文分享自微信公众号 - 程序你好(codinghello)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

5个提升生产效率的Python开发和配置的小技巧

在以前,作为一个刚开始使用Python的开发者,我时常为布设一个有效的开发环境感到困扰。找到一套自己能顺畅使用的环境且为此培养一个正确的习惯是很困难的。 之前...

39290
来自专栏顶级程序员

为什么开源社区使用邮件列表讨论问题

在Apache社区有一个不成文的规矩:“没有在邮件列表里面发生的事情就没有发生”。今天这篇blog就和大家聊聊为什么会有这样的规矩。 由于社区的成员遍布世界各地...

41090
来自专栏Fred Liang

VOICE DESIGN GUIDE 语音设计指南翻译

22930
来自专栏码神联盟

碎片化 | 第一阶段-02-Java的跨平台性-视频

如清晰度低,可转PC网页观看高清版本: http://v.qq.com/x/page/e05653gnkoa.html Java语言概述 是SUN(斯坦福大学...

43470
来自专栏Spark学习技巧

关于ETL那些事情

ETL这个概念也很久了,但是真正的进入大家的视野估计还是由于大数据。由于从15年至今,其实整个大数据领域都处于做数据仓库,然后简单生成报表这个层面,ETL(ET...

40650
来自专栏Web项目聚集地

到底是 Java 好还是 Python 好?

语言的优劣之争是个永恒的话题,有时候一次偶然地“擦枪走火”甚至可能会引发一场铁杆粉丝之间的“战争”。

12820
来自专栏斑斓

工作坊 | 领域驱动设计中的事件建模

这两日,我参加了Implementing Domain Driven Disign一书作者Vaughn Vernon组织的IDDD Workshop。培训中,V...

41270
来自专栏云飞学编程

学爬虫就要找点有意思的小项目:用python做个查询空气质量的脚本

俗话说:兴趣是最好的老师,只是闷头看书,闭门造车是学不好的,今天给大家带来一个适合刚入门新手的爬虫体验,抓取某网站空气质量数据,并做成一个可查询的脚本!

28940
来自专栏智能算法

顶尖程序员的五种思维模式,你具备吗?

《THe Effective Engineer》的作者Edmond Lau采访了很多硅谷顶级科技公司的顶尖软件工程师。他发现这些给世界带来巨大影响的的工程师们至...

364150
来自专栏程序员互动联盟

一个C++ 程序员的生产力,大概相当于20个C程序员,200个java程序员,如何看待这句话?

这种话听听就行了,起码不是真正程序员说过的话,每个编程语言都有其存在的必然性,很难直接通过数据直接比较谁更加厉害,语言没有谁更加厉害这种概念,只能是谁更加合适。

10530

扫码关注云+社区

领取腾讯云代金券