敏捷技能修炼之小舵板之一:意图导向编程

前言

最近想学习敏捷开发,在看一本书,叫《敏捷技能修炼-敏捷软件开发与设计的最佳实践》。正如书中所说,两个同等经验的程序员,在效率和质量上可能会有10倍的差距。随着写的代码越来越多,我也有这种体会,我们写的代码不能只是功能的实现,还应该注重代码的质量,如可读性、易理解、易修改等。

书中第一部分介绍了"小舵板"理论,分别是:

  • 意图导向编程
  • 分离构造和使用
  • 代码未动,测试先行

意图导向编程

意图导向编程也称目的导向编程,在使用意图导向编程时,我们把一个问题分解为一系列功能性步骤,并假定这些功能步骤已经实现,我们只需把把各个函数组织在一起即可解决这一问题。在组织好整个功能后,我们在分别实现各个方法函数。举书中的一个例子,假设我们需要创建一个交易业务的服务程序,具体需求如下:

  1. 交易信息开始于一串标准ASCII字符串。
  2. 这个信息字符串必须转换成一个字符串的数组,数组存放的此次交易的领域语言中所包含的词汇元素(token)。
  3. 每一个词汇必须标准化。
  4. 包含超过150个词汇元素的交易,应该采用不同于小型交易的方式(不同的算法)来提交,以提高效率。
  5. 如果提交成功,API返回"true";失败,则返回"false"。

这里没有涉及具体细节,并假定具体算法已实现。

需求中的每一点都代表一个功能性步骤,使用意图导向编程,我们假定每一个功能步骤已经实现,我们可以写出下面的代码

public class Transaction
{
	public Boolean commit(String command)
	{
		Boolean result = true;
		String[] tokens = tokenize(command);
		normalizeTokens(tokens);
		if (isALargeTransaction(tokens))
		{
			result = processLargeTransaction(tokens);
		}
		else
		{
			result = processSmallTransaction(tokens);
		}
		return result;
	}
}

commit()方法是我们定义的应用程序接口(API),它是公用方法,该方法只是一系列的方法调用,实现一系列意图。

接下来,我们就可以分别实现各个方法,如果是团队开发,还可根据团队中的特点分配任务。

使用意图导向编程的优点

如果遵循意图导向编程的方式,那么代码将会:

  • 更加内聚(职责单一)。
  • 更加可读和清晰。
  • 更易于调试。
  • 更易于重构和优化,所以只做最少的设计,满足当前需求。
  • 更易于单元测试。

同时,从这些优点中还会延伸出其他优点:代码更易于修改个扩展。其他还有:

  • 模式更易应用到代码。
  • 创建的方法可以容易地从一个类移动到另一个类。
  • 代码更易于维护。

更重要的是,遵循意图导向编程的方式并不用花费额外的精力。

关于代码注释

关于代码注释众说纷纭,《代码大全》一书中主张代码要有自说明性,因为代码才是最新的,而注释可能已经过时(修改代码但是未修改注释),我比较赞同这个观点。意图编程就带来了一个额外的好处,代码基本上就是自说明的,看看上面这段代码,几乎不用再注释它了,代码本身就充当了注释的作用。

结语

以上就是关于意图导向编程的介绍,后续还会继续把其他"小舵板"更新。

原文链接: http://zh.5long.me/2014/Agile-Development-Programming-by-Intention/
版权声明:自由转载-非商用-保持署名 | Creative Commons BY-NC 4.0

原文地址:https://www.cnblogs.com/5long/p/4745310.html