zoukankan      html  css  js  c++  java
  • 敏捷技能修炼之小舵板之一:意图导向编程

    前言

    最近想学习敏捷开发,在看一本书,叫《敏捷技能修炼-敏捷软件开发与设计的最佳实践》。正如书中所说,两个同等经验的程序员,在效率和质量上可能会有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

  • 相关阅读:
    C# 文件类的操作---删除
    C#实现Zip压缩解压实例
    UVALIVE 2431 Binary Stirling Numbers
    UVA 10570 meeting with aliens
    UVA 306 Cipher
    UVA 10994 Simple Addition
    UVA 696 How Many Knights
    UVA 10205 Stack 'em Up
    UVA 11125 Arrange Some Marbles
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/5long/p/4745310.html
Copyright © 2011-2022 走看看