65.9K
CodeProject 正在变化。 阅读更多。
Home

让您看起来更聪明的十个软件关键词

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.60/5 (6投票s)

2014年9月8日

CPOL

7分钟阅读

viewsIcon

11350

十个有趣的软件工程术语,听起来很有趣,可以在技术讨论中产生影响。

look-smarter

人们说衣着不能决定一个人,我说正确的语汇可以提升开发者的表现。

在这篇文章中,我精选了一组我最喜欢的关键词,每次听到它们,我都会微笑并想到“宅男”。

1 – 救世主函数 (God Function)

这是一个包罗万象的函数(方法)。它是一个函数,能做所有的事情,可能有 100 行甚至更多。显然,编写救世主函数与干净可读的代码原则相悖,通常 guilty of using it 的人是新手和来自其他领域(如数学家)的专业人士。

这个词通常带有讽刺意味,用来嘲笑一个冗长且需要重构的函数。

2 – 垂直关注点 (Vertical Concerns)

它是一个与你编写的代码片段不直接相关的关注点。所以,当你编写一些代码将用户信息保存到数据库时,记录事件并通知其他系统已添加记录,这些大部分都是垂直关注点。

在 C# 中,垂直关注点通常通过特性来处理,Membership Provider 特性就是一个很好的例子。

3 – 跨领域关注点 (Cross-Cutting Concerns)

引自维基百科

跨领域关注点是程序中影响其他关注点的方面。这些关注点通常无法在设计和实现中从系统的其余部分清晰地分解出来,可能导致代码分散(代码重复)、缠结(系统之间存在显著依赖关系),或两者兼而有之。

例如,如果编写一个处理病历的应用程序,病历的索引是核心关注点,而记录数据库或用户数据库的更改历史,或者一个认证系统,将是跨领域关注点,因为它们触及程序的大部分部分。

http://en.wikipedia.org/wiki/Cross-cutting_concern

4 – HATEOAS

引自维基百科

HATEOAS,是“Hypermedia as the Engine of Application State”的缩写,是 REST 应用程序架构的一个约束,它使其区别于大多数其他网络应用程序架构。其原则是,客户端完全通过应用程序服务器动态提供的超媒体与网络应用程序进行交互。REST 客户端除了对超媒体有通用理解外,无需对如何与任何特定应用程序或服务器进行交互有任何先验知识。相比之下,在面向服务的体系结构 (SOA) 中,客户端和服务器通过通过文档或接口描述语言 (IDL) 共享的固定接口进行交互。

HATEOAS 约束以一种允许服务器功能独立演进的方式解耦了客户端和服务器。

http://en.wikipedia.org/wiki/HATEOAS

我很久以前(2009 年?)在参加一个关于 REST 的活动时,从 Jim Webber 那里第一次听到了这个词。

5 – 泛在语言 (Ubiquitous Language)

引自 Martin Fowler

泛在语言是 Eric Evans 在领域驱动设计 (Domain Driven Design) 中提出的术语,用于描述在开发人员和用户之间建立一种通用、严谨的语言的做法。这种语言应该基于软件中使用的领域模型——因此需要严谨,因为软件无法很好地处理歧义。

https://martinfowler.com.cn/bliki/UbiquitousLanguage.html

6 – 流式接口 (Fluent Interface)

引自维基百科

流式接口(最初由 Eric Evans 和 Martin Fowler 提出)是面向对象 API 的一种实现,旨在提供更具可读性的代码。

流式接口通常通过方法级联(具体来说是方法链)来实现,以传递后续调用的指令上下文(但流式接口不仅仅是方法链)。通常,上下文通过调用方法的返回值自身来定义,其中新上下文等同于通过返回 void 上下文结束的最后一个上下文。

http://en.wikipedia.org/wiki/Fluent_interface

流式接口用法的理论示例可能如下所示:
member.Name("Adam").Country("England").City("London");

7 – 乐观并发控制 (Optimistic Concurrency Control)

引自维基百科

乐观并发控制 (OCC) 是一种并发控制方法,应用于事务系统,如关系数据库管理系统和软件事务内存。OCC 假设多个事务可以经常完成而不会相互干扰。在运行时,事务使用数据资源而不获取这些资源的锁。在提交之前,每个事务会验证没有其他事务修改过它读取的数据。如果检查发现冲突的修改,则提交的事务会回滚并可以重新启动。乐观并发控制最早由 H.T. Kung 提出。

OCC 通常用于数据争用较低的环境。当冲突很少时,事务可以完成而无需管理锁的开销,并且事务无需等待其他事务的锁清除,从而带来比其他并发控制方法更高的吞吐量。然而,如果对数据资源的争用频繁,反复重启事务的成本会严重损害性能;通常认为在这些条件下,其他并发控制方法具有更好的性能。然而,基于锁(“悲观”)的方法也可能因其会极大地限制有效并发性(即使避免了死锁)而导致性能不佳。

http://en.wikipedia.org/wiki/Optimistic_concurrency_control

8 – 圈复杂度 (Cyclomatic Complexity)

引自维基百科

圈复杂度是一种软件度量(测量)。它由 Thomas J. McCabe, Sr. 于 1976 年开发,用于指示程序的复杂性。它是对编程指令复杂性的定量度量。它直接测量了程序源代码中线性独立路径的数量。

圈复杂度使用程序的控制流图进行计算:图的节点对应于程序不可分割的命令组,如果第二个命令可能在第一个命令之后执行,则一个有向边连接两个节点。圈复杂度也可以应用于程序中的单个函数、模块、方法或类。

一种名为“基础路径测试”的测试策略(由 McCabe 最初提出)是测试程序中的每一条线性独立路径;在这种情况下,测试用例的数量将等于程序的圈复杂度。

http://en.wikipedia.org/wiki/Cyclomatic_complexity

我第一次接触到这个术语是在 ReSharper 中,当时它指出一段遗留代码的圈复杂度很高。

9 – 响应式网页设计 (Responsive Web Design)

引自维基百科

响应式网页设计 (RWD) 是一种网页设计方法,旨在制作能够提供最佳浏览体验的网站——在各种设备(从手机到桌面电脑显示器)上都能轻松阅读和导航,并且需要最少的缩放、平移和滚动。

http://en.wikipedia.org/wiki/Responsive_web_design

10 – 鸭子类型 (Duck Typing)

引自维基百科

在面向对象编程语言中,鸭子类型是一种类型系统,其中对象的属性和方法决定了有效的语义,而不是其从特定类继承或实现显式接口。该概念的名称指的是鸭子测试,该测试归功于 James Whitcomb Riley(见下文历史),可以这样表述:

当我看到一只像鸭子一样走路、像鸭子一样游泳、像鸭子一样叫的鸟时,我就叫它鸭子。

在鸭子类型中,程序员只关心确保对象在给定上下文中按预期运行,而不是确保它们是特定类型。例如,在非鸭子类型的语言中,你会创建一个函数,要求传入的对象必须是 Duck 类型,以确保该函数能够使用对象的 walk 和 quack 方法。在鸭子类型的语言中,函数将接受任何类型的对象,并简单地调用其 walk 和 quack 方法,如果这些方法未定义,则会产生运行时错误。鸭子类型实践依赖于文档、清晰的代码和测试来确保正确使用,而不是正式指定类型。

http://en.wikipedia.org/wiki/Duck_typing

结论

抛开玩笑不谈,如果我在面试一个人,而他/她恰当地使用了一些关键短语,这将是一个很大的加分项,证明他们知道自己在说什么。

我们建议在面试中使用这些关键词时要谨慎……

© . All rights reserved.