互动平台开发笔记 2005-3-15

我今天正式开始编写互动平台的代码。我想让CD负责Flex界面一块,而自己编写所有的后台程序。这是一个尊循XP原则的TDD开发。

我获得的是早先安排CD编写BBS需求报告,他在需求报告中列出了一个他所看到的BBS应该具有的各种功能。尽管这个报告能够对我的开发起到驱动作用之前我仍然要花费大量的时间去整理,但是还是可以从这个报告中逐步抽取素材来实现TDD。我优先选择了用户操作的功能,整理了二十多条US作为第一迭带期的任务。

在开发之初,显然需要说明的是我对TDD的做法并不是很熟练。但是我觉得XP是应该可以从任意原点出发的(目前还在证明这一点)。因此,我很任意地抽取了第一个US:用户注册。

首先我意识到显然需要一个User类,然后还有register方法。我快速地写完了一个可能并不正确的测试,进一步地,为了测试通过我建立了这个类和相应的方法。JU变绿了。下一步的重构,让我足足考虑了十分钟。我认为这个Register方法内部应该是一个空的壳子。因为US上既没有要求我处理用户输入、也没有要求我存储用户,更没有说应该处理哪些异常及怎么处理。一个BO方法中,要么就是在根据业务规则处理相关的数据,要么就是将任务委派给他的层次去执行(比如持久化服务层),要么就是在处理意外情况。我实在想不出还有什么操作能够在一个BO方法中出现。

但是,我又说服不了自己TDD出来一个空的Register。我想这个Register应该会带来些什么。考虑一个隐喻,如果BO方法实际存在,那么Reigeter的功能大概就是将BO对象中的数据按照Register的业务要求进行验证,然后送入服务层去持久化,最后处理意外情况,或在没有意外的时候根据要求返回控制。因此,在制作Register的方时,我们确实可以看看这个BO里的字段(数据)应该以和面目存在。我继续隐喻。于是在需求中发现一段关于用户数据由哪些具体的字段组成的要求。于是,我放下User.regiseter。快速建立了一个POJO – UserBean。

这个UserBean是一个纯粹的POJO符合JavaBeans标准。我把它放在一个新的包中,接下来的一分钟里,我开始说服自己建立一个构架。也就是说,BO相关的数据全部抽取到DataTransferObject这个新的包中,作为数据传输层。而BO层与这个传输层的关系是BO里的BO类实用DTO里的DTO类。例如User这个BO类使用UserBean。

为什么我能够把构架的想法放进去呢,很简单因为两个原因:1、我觉得需要,2、我觉得能够很简单就实现。所以我这么做了。

有了这个DTO后,我发现了意外的收获。当我返回去完成User那个重构的时候,我很自然地在Setup和tearDown里面去创建了一个UserBean,然后把UserBean设置到User里面去。原来的testRegister()没有动,User的register方法也仍然空着。但是一切都很好,只等着那些要求持久化User和要求注册界面的那些US了。

现在我在一个新的构架上继续TDD。在继续下去之前,我试图理解一个问题。既然是TDD那么为什么会有不经过测试而直接建立UserBean这样的事情发生呢?我最后的答案是:谁会想去测试一个setter/getter的POJO呢?当然非要TDD也可以,但是很明显的事情,且完全落在US的要求内(步子不大)的情况下,无任何必要这样做。

到了晚上,和Q交流了一下白天做的事情。Q对于我那个register()存在两个问题:一是为什么User类会有register方法,二是为什么不是register(userData)。

对于第一个问题,我的回答是,因为Register操作的数据位于User中,因此Register这个职责暂时就这么分配了。当然User的register可能并不是系统中用户注册功能的发起者,也不可能是具体持久化的执行者,肯定是一个委派链条的中间环节。无论如何,根据那个US我只能作出这样的抽象和这样的职责分配。

对于第二个问题,我是这样看的。(new User(userData)).Register();给人的感觉是,User实际存在了,只是目前还没有证实倍系统确认,现在让他Register()一下。而(new User()).register(userData)给人的感觉是,那个User只有驱壳没有灵魂,调用register(userData)就仿佛在说,我只有驱壳,没有灵魂,要是让我有血有肉的话,那么让我的驱壳去把我的灵魂注册一下吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
目 录 摘 要 I ABSTRACT II 第一章 绪论 1 1.1 选题的背景 1 1.2 国内外状况 2 1.3 问题的提出 3 1.4 主要研究内容 3 1.5 论文的组织结构 3 第二章 相关理论及技术介绍 5 2.1 开发平台 5 2.1.1 MyEclipse 5 2.1.2 NetBeans 5 2.2 相关技术 5 2.2.1 XML 5 2.2.2 Dom4j 6 2.2.3 SOAP 6 2.2.4 WebService 7 2.2.5 WSDL 7 2.2.6 Velocity 8 2.2.7 Swing 8 2.2.8 Java反射 9 2.3 本章小结 9 第三章 服务开发平台的总体框架 10 3.1 前台可视化IDE的设计 11 3.2 后台的总体设计 12 3.2.1 后台RuntimeContainer容器管理模块设计概述 13 3.2.2 后台UDDI注册中心模块设计概述 14 3.2.3 后台SP Agent Builder代码生成模块设计概述 16 3.3 本章小结 20 第四章 服务生成工具SP Agent Builder的设计实现 21 4.1 三层XML schema设计与解析模块的设计实现 21 4.1.1 功能层XML schema的设计 21 4.1.2 表示层XML schema 的设计 24 4.1.3 传输层XML schema 的设计 24 4.1.4 三层XML文件解析的设计实现 26 4.2 数据转换模块的设计实现 28 4.2.1 目标数据格式介绍 28 4.2.2 对象与目标数据格式之间的转换 31 4.3 传输代理模块的设计实现 35 4.3.1 网络传输协议 36 4.3.2 传输代理的运作流程 38 4.4 代码生成器模块的设计实现 39 4.4.1 模板的设计 39 4.4.2 代码生成的运作流程 40 4.5 可视化编辑器模块的设计实现 41 4.5.1 可视化编辑器的设计 41 4.5.2 可视化编辑器的运作流程 42 4.5 本章小结 42 第五章 系统实现 44 4.1 创建服务 44 4.2 编辑服务 48 4.3 删除服务 50 4.4 本章小结 51 第六章 结论 52 致 谢 53 参考文献 54 毕业设计小结 56 附录A XML数据类型和Java数据类型之间的映射规则 57 附录B 功能层XML schema的设计 58 附录C 表示层XML schema的设计 60 附录D 传输层XML schema的设计 61 附录E TXT文本的格式介绍 63
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值