技术开发 频道

敏捷实践:软件开发中的理想与现实(九)

【IT168 技术文章】    我说过要介绍一下项目组成员的,既然马上要真正开始做项目,那么互相好好了解一下还是很有必要的。
    项目组包括我一共四人,分别是realdodo(我)、chanjinn、wumaomao、XophiiX。我不用多说,在项目中以项目流程引导者的身份出现,同时也参与开发。chanjinn是我的学长,做过好几个项目,编过很多代码,嵌入式、Linux都有研究,做项目很有思想,唯一只是C++基础相对差一点,不过不要紧,软件开发中的经验和悟性很重要。wumaomao是团队中少有的C++高手,了解不少C++和设计模式的东西,有很强的编程能力,绝对是项目中的中坚力量。XophiiX是项目组中最年轻的同学,比我小整四岁,但在编程方面已经很有感觉,并且酷爱游戏编程,对新东西非常感兴趣。
    在团队中能够有这么强大的阵容真是十分难得,我相当知足。不过,如果放到更大的范围内比较,我们都是菜鸟中的菜鸟,我们的能力还远没有值得骄傲的地步。这不,2月20日,项目正式开张的第一天,我们就遇到了大难题。
    我们项目的第一个迭代目标是,将用ASN语法描述的消息转换成C语言数据结构。至于什么是ASN、为什么要自己开发而不用现成的ASN到C的转换工具、为什么不用yacc、为什么用C++开发这些功能等问题我都不想回答,反正我们有自己的理由。写一个最简单的例子,假设有下面的消息:

A ::= SEQUENCE { b BOOLEAN, c INTEGER }

    那么转换成C语言之后应该是:

typedef struct tagA { BOOL b; LONG c; }A;

    相信一看这个例子就能够明白,SEQUENCE和struct相对,BOOLEAN和BOOL相对,INTEGER和LONG相对,只要处理好这个对应关系就问题不大。根据这个想法,XophiiX提出一种设计(白板上画的草图,我把它稍微整理了一下,如图1)。


图1

    当然,这是一种有效的做法,但是扩展性实在太差,因为ASN的语法可不比C语言简单。例如这个消息:

Sample ::= CHOICE { b BOOLEAN, c INTEGER }

    那么换成C语言之后应该是:

enum Sample_E { I_B, I_C }; typedef struct tagSample { ULONG ulIndex; union { BOOL b; LONG c; }choice; }Sample;

    噢,这是什么东西,根本就没有办法简单地进行对应了。如果用刚才简单对应的方式来处理,这个系统真的会变成一个怪物。所以,这个方案就被否定。为了方便地确定设计的方向,我根据需求画出这个系统最基本的处理流程图(如图2)。


图2

    但是,我还没有想好如何把它变成可分解的类,所以就算大家都比较认同这样的流程也没有用。不过作为一个大体思路,起码有助于指明方向。于是,我们把上图做了一个精简,并准备对各部分进行细化。精简图如图3。


图3

    大家心里都明白,最重要也是最麻烦的就是如何收集词元信息。如何做最好呢?不知道!眼看着上午就要结束,白板上的图画了又擦,方案往往提出几分钟就被否,然后所有人都陷入一种抓狂之中。
    It's lunch time。人是铁饭是钢,还是去休息一下吧。午餐的时候大家都比较沉默,虽然我一直安慰大家,每个项目开始的时候都是这样的,设计的灵感会突然冒出来的。
    不管怎么样,灵感还真的就出来了。不知道是谁提出了一个“作坊”模型,让大家眼前一亮。简单地说,就是把处理ASN文件得到的词元当作零件,收集词元信息当作零件分类,修饰词元信息当作零件组装,输出C文件则是最终包装,那么“作坊”(就是收集词元信息)负责进货(得到零件)和销售(零件分类输出)。按这样的说法,为了进货,我们需要一个库存;为了分类,我们需要工人;为了管理工人,我们需要一个经理。他们的职责也很清楚,库存负责存放零件,经理负责根据库存情况划定工作范围并“雇佣”合适的工人,工人则仅仅专注于工作。他们的关系如图4。


图4

    这个图并不详细,甚至有些明显的错误,但是我们已经可以按照中央的想法进行工作了。综合来看,现在可以把整个处理过程表达如图5。


图5

    下面,我们就可以针对这种设计,具体规定几部分之间的接口。在规定接口时我们发现,这个流程并不具有弹性,因为作坊必须知道它的顾客(修饰词元信息)的情况才能工作。而我们是想实现一个面向广大人民群众的作坊,所以我们引入了一个代理商来解决这个问题。代理商具体是什么呢?直接用main来做这样的代理其实就可以了。最终,今天的框架如图6。


图6

    至于接口,我们也一一确定,此处不再赘述。今天的晚餐吃得特别香。

0
相关文章