﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-JAVA随笔</title><link>http://www.blogjava.net/qujingbo/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 09:57:06 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 09:57:06 GMT</pubDate><ttl>60</ttl><item><title>闭环跟踪--提高软件开发质量，推动过程改进</title><link>http://www.blogjava.net/qujingbo/archive/2007/05/25/119896.html</link><dc:creator>曲静波</dc:creator><author>曲静波</author><pubDate>Fri, 25 May 2007 01:52:00 GMT</pubDate><guid>http://www.blogjava.net/qujingbo/archive/2007/05/25/119896.html</guid><wfw:comment>http://www.blogjava.net/qujingbo/comments/119896.html</wfw:comment><comments>http://www.blogjava.net/qujingbo/archive/2007/05/25/119896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qujingbo/comments/commentRss/119896.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qujingbo/services/trackbacks/119896.html</trackback:ping><description><![CDATA[&nbsp;
<p align=center><strong><span>闭环跟踪</span></strong><strong></strong></p>
<p align=right><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>--</span><span>提高软件开发质量，推动过程改进</span></p>
<p align=right>&nbsp;</p>
<p><span>有幸在</span><st1:chsdate w:st="on" Year="2007" Month="5" Day="24" IsLunarDate="False" IsROCDate="False"><span>07</span><span>年</span><span>5</span><span>月</span><span>24</span><span>日</span></st1:chsdate><span>参加</span><span>Telelogic</span><span>组织的&#8220;闭环跟踪&#8221;研讨会。</span><span>John Carrillo</span><span>在会上做了精彩的演讲，会议开始就提出了主题&#8220;如何提高软件开发质量，推动过程改进&#8221;。</span></p>
<p>&nbsp;</p>
<p><span>John</span><span>提出提高软件开发质量，主要以下三点：</span></p>
<p><span><span>(1)<span>&nbsp;&nbsp; </span></span></span><span>业务流程优化</span><span> BPO (Business Process Optimization)</span></p>
<p><span><span>(2)<span>&nbsp;&nbsp; </span></span></span><span>应用生命周期</span><span> ALM (Application Lifecycle Management)</span></p>
<p><span><span>(3)<span>&nbsp;&nbsp; </span></span></span><span>模型驱动开发</span><span> <span>MDD (</span></span><span>Model-Driven Development)</span></p>
<p>&nbsp;</p>
<p><span>创新、简化开发流程及开发业务，遵循规则开发、依据规则管理，可以有效提高生产率。</span></p>
<p>&nbsp;</p>
<p><span>John</span><span>在谈及&#8220;提前管控质量&#8221;时，以例说明，你要去瑞士参加重要会议，刚下飞机，将随身携带的旅行箱丢失，里面有你的正装，而你又要去参加一个重要会议，这时你怎么办？。</span><span>John</span><span>提出的例子很有说明性，其实你可能想再买一套就可以啦，那为什么不去考虑怎么可以在丢失之前去管控呢。项目中也如此，</span><span>John</span><span>提出数据，从项目开始发现问题到最终版本发现问题，这时最终版本发现问题会比开始发现问题的损失增长成百上千倍，那项目中需要管控有哪些呢？</span></p>
<p>&nbsp;</p>
<p><span><span>(1)<span>&nbsp;&nbsp; </span></span></span><span>最终发行版本仅反映最初所分配需求的</span><span>52%</span><span>。</span><span><br></span><span>其导致原因无非两点</span><span>,1)</span><span>需求调研的需求与客户提出需求不符。</span><span>2)</span><span>需求多，膨胀，软件开发商做不到。</span></p>
<p><span><span>(2)<span>&nbsp;&nbsp; </span></span></span><span>需求剧变，</span><span>John</span><span>提出数据，以</span><span>1</span><span>年项目为例，每月</span><span>1%-13%</span><span>的需求变更，最终</span><span>30%</span><span>的需求变更。</span><span><br></span><span>导致原因：</span><span>1)</span><span>引发客户变更。</span><span>2)</span><span>系统需求变更</span></p>
<p><span><span>(3)<span>&nbsp;&nbsp; </span></span></span><span>发布版本。</span><span><br></span><span>导致原因：</span><span>1)</span><span>需求变量对发布有影响</span></p>
<p>&nbsp;</p>
<p><span>最终</span><span>John</span><span>提出结论：</span><span>70%</span><span>功能缺陷，不具备可操作性，无法交付。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>John</span><span>开始进入主题，&#8220;闭环跟踪&#8221;，其实这种研讨会无非就是宣传公司产品，开始宣传他的思想，让你接受他的思想，好，他又用软件产品实现了他的思想，买吧。</span></p>
<p><span>正题，闭环跟踪主要有三种方法：</span></p>
<p><span><span>1)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>自上而下</span></p>
<p><span><span>a)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>收集&#8220;客户反馈&#8221;，确保在整个开发生命周期中有效管理、审查并跟踪客户请求。</span></p>
<p><span><span>b)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>需求工作流程管理，通过灵活和可重复流程来保持对需求变更的跟踪。</span></p>
<p><span><span>c)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>需求执行，确保需求变更在最终产品中得以执行。</span></p>
<p><span><span>2)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>自下而上</span></p>
<p><span><span>a)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>需求执行，任务执行。</span><span> </span></p>
<p><span><span>b)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>任务追述到需求，再从需求追述到客户反馈。</span></p>
<p><span><span>c)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>需求验证任务是否满足客户反馈是否相符，确认软件可以满足用户提出的需求。</span></p>
<p><span><span>3)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>提高跨生命周期的可见性和可预测性</span></p>
<p><span><span>a)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>通过自上而下和自下而上两种方法，利益相关者无疑可以轻松地在整个产品工作流程中保持对需求变更和变更请求的跟踪。管理需借助自上而下的状态信息来确定开发团队达成其目标的具体方式。警报和考核有助于项目经理及他人开展对期限、需求、项目分配和软件开发其它方面的跟踪。各级经理不但可以清晰把握开发进程的各个阶段，还可以了解不同角色的与组件间的互动方式。定期警报将协助项目经理针对进度或预处中所出现的偏差迅速作出响应，并在事况恶化前及时修改。</span><span><br></span><span>以上是</span><span>Telelogic</span><span>白皮书中介绍的，其实总结出来，无非就是出些报表、驻状图、饼图什么的，再加上可以配置一些预警。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>John</span><span>强调</span><span>CMMI</span><span>只是告诉你&#8220;做什么。&#8221;不会告诉你&#8220;应该怎么去做&#8221;，一般过</span><span>CMMI</span><span>的过程：参考模型</span><span>-&gt;</span><span>培训课程</span><span>-&gt;</span><span>评估方法（打&#8220;对号&#8221;，就是哪项满足规范就打个对号）。</span><span>CMMI</span><span>需要三个主要组成元素：人，规则，工具。而</span><span>CMMI</span><span>不会告诉你做什么，这时就有我们的工具规范你怎么去做，唉，终于提正题，介绍</span><span>Telelogic</span><span>公司的产品了。</span></p>
<p>&nbsp;</p>
<p><span>茶歇</span></p>
<p>&nbsp;</p>
<p><span>该演示产品了，首先是需求管理工具</span><span>Doors</span><span>，说白了其实就是一个流程，首先用户提出需求</span><span>-&gt;</span><span>审核（是否同意）系统需求</span><span>-&gt;</span><span>用例</span><span>-&gt;</span><span>提出实施请求（使用状态跟踪）。</span><span>Doors</span><span>可以按项目及需求说明书、概要设计、详设逐一关联，举个例子，提出功能</span><span>A</span><span>需求，可关联功能</span><span>A</span><span>概要设计，功能</span><span>A</span><span>的详细设计。不就是我们一个工单吗？拿这种产品来唬人，不过人家的思想是先进的，我们取其精华。其实人家也是有特点的。</span></p>
<p><span>下面就说说配置管理工具</span><span>Synergy CM</span><span>，其实我看</span><span>CM</span><span>代码管理部分就像</span><span>Source safe</span><span>，只是人家将</span><span>Doors</span><span>与</span><span>CM</span><span>有机的集成在一起，其实感觉就数据源一样就解决集成了。一样</span><span>Doors</span><span>提出的请求实施与</span><span>CM</span><span>的任务联系在一起，例：我在</span><span>Doors</span><span>提出</span><span>A</span><span>功能的请求实施并派给实施人，然后实施人登入</span><span>CM</span><span>将看到派来的任务，之后实施人分析派来的任务，这时就要</span><span>source safe</span><span>了，实施人员</span><span>check out</span><span>要完成任务所涉及的代码，完成后</span><span>commit</span><span>。在</span><span>CM</span><span>中可以追述</span><span>Doors</span><span>的数据，也就是说有提出提出实施请求，用例，审核，需求人是谁（这就是自下而上了）</span><span>CM</span><span>提供类似</span><span>Source safe,svn ,cvs</span><span>的功能，代码比较，目录比较，形成基线。基线比较，任务比较。提供任务，代码，基线告等的报告，统计、总体实施进度等。典型的自下而上，代码</span><span>-&gt;</span><span>任务</span><span>-&gt;</span><span>实施请求</span><span>-&gt;</span><span>需求。</span><span>CM</span><span>提供</span><span>eclipse plugin</span></p>
<p>&nbsp;</p>
<p><span>ＯＫ，总算说完了，我总结下吧。其实</span><span>John</span><span>的思想是好的，需求不断的变更导致项目的成本增加，管理难度增大。</span><span>John</span><span>提出了使用</span><span>Doors</span><span>工具来管理需求，来规范化，梳理你的开发流程，而又用</span><span>CM</span><span>来管理开发人员的开发任务管理。而</span><span>Doors</span><span>与</span><span>CM</span><span>集成更是一把利器，梳理你的开发流程。其实</span><span>Doors</span><span>及</span><span>CM</span><span>根本没有什么技术难度，但它可以解决像</span><span>CMMI</span><span>无法帮你解决的，如</span><span>Jhon</span><span>所说，</span><span>CMMI</span><span>只是告诉你做什么，而</span><span>Telelogic</span><span>会告诉你怎么做。</span></p>
<p>&nbsp;</p>
<p align=right><st1:chsdate w:st="on" Year="2007" Month="5" Day="25" IsLunarDate="False" IsROCDate="False"><span>2007-5-25</span></st1:chsdate></p>
<img src ="http://www.blogjava.net/qujingbo/aggbug/119896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qujingbo/" target="_blank">曲静波</a> 2007-05-25 09:52 <a href="http://www.blogjava.net/qujingbo/archive/2007/05/25/119896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>规则容器的实现</title><link>http://www.blogjava.net/qujingbo/archive/2007/04/28/114253.html</link><dc:creator>曲静波</dc:creator><author>曲静波</author><pubDate>Sat, 28 Apr 2007 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/qujingbo/archive/2007/04/28/114253.html</guid><wfw:comment>http://www.blogjava.net/qujingbo/comments/114253.html</wfw:comment><comments>http://www.blogjava.net/qujingbo/archive/2007/04/28/114253.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qujingbo/comments/commentRss/114253.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qujingbo/services/trackbacks/114253.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1、规则规范业务流程，且现有规则已经实现不仅使用在流程平台上且可以其他模块，如：作业计划。仅需配置。<br>2、支持xml中配置表达式，工程人员将输入/输出参数使用表达式配置进行赋值（不需书写任何代码），故而影响流程的流向。<br>3、支持xml中配置规则分组，并将规则赋予优先级，规则会按照规则分组优先级执行规则，直到满足规则条件退出。<br>4、支持除表达式复杂的业务逻辑，工程人员可以开发java代码实现业务方法，在xml中简单配置即可以实现复杂业务逻辑。<br>5、支持listener，在调用规则之前、之后都会触发before(),after()方法。工程人员可按业务编写多个lisener，使lisener有效只需要简单xml配置。<br>6、支持输入输出参数的验证，根据二次开发人员的xml配置，按输入输出参数配置类型进行验证，若输入/输出参数不符合业务要求则抛出异常。&nbsp;&nbsp;<a href='http://www.blogjava.net/qujingbo/archive/2007/04/28/114253.html'>阅读全文</a><img src ="http://www.blogjava.net/qujingbo/aggbug/114253.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qujingbo/" target="_blank">曲静波</a> 2007-04-28 09:49 <a href="http://www.blogjava.net/qujingbo/archive/2007/04/28/114253.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebSphere Integration Developer 初步认识</title><link>http://www.blogjava.net/qujingbo/archive/2007/02/02/97574.html</link><dc:creator>曲静波</dc:creator><author>曲静波</author><pubDate>Fri, 02 Feb 2007 07:39:00 GMT</pubDate><guid>http://www.blogjava.net/qujingbo/archive/2007/02/02/97574.html</guid><wfw:comment>http://www.blogjava.net/qujingbo/comments/97574.html</wfw:comment><comments>http://www.blogjava.net/qujingbo/archive/2007/02/02/97574.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/qujingbo/comments/commentRss/97574.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qujingbo/services/trackbacks/97574.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 通过 29-31 为期 3 天的 IBM WPS 培训。使我对 IBM WID 有了感观上的认识，并对炒的火热的一些概念（ SOA 、 SCA 、 SDO ）更进一步的认识。现就我理解对 WID 的培训进行总结，若哪里有问题，请各位指正。 &nbsp; SCA &nbsp; 刚上课， IBM 讲师就开始大谈 SCA ，现在就我理解谈下对 SCA 的认识。 Service Compo...&nbsp;&nbsp;<a href='http://www.blogjava.net/qujingbo/archive/2007/02/02/97574.html'>阅读全文</a><img src ="http://www.blogjava.net/qujingbo/aggbug/97574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qujingbo/" target="_blank">曲静波</a> 2007-02-02 15:39 <a href="http://www.blogjava.net/qujingbo/archive/2007/02/02/97574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面向组件的一些想法</title><link>http://www.blogjava.net/qujingbo/archive/2006/12/15/87863.html</link><dc:creator>曲静波</dc:creator><author>曲静波</author><pubDate>Fri, 15 Dec 2006 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/qujingbo/archive/2006/12/15/87863.html</guid><wfw:comment>http://www.blogjava.net/qujingbo/comments/87863.html</wfw:comment><comments>http://www.blogjava.net/qujingbo/archive/2006/12/15/87863.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/qujingbo/comments/commentRss/87863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qujingbo/services/trackbacks/87863.html</trackback:ping><description><![CDATA[
		<div>
				<font face="Verdana">     这几天一直在思考几个问题，现在提出了SCA（面向构件）的思想。而现在提出的SCA是在SOA的基础上建立的。而我就我们目前产品的状况，谈一谈我使用古老的技术实现SCA的思想，当然不是建立在SOA上的。因为我们每个模块和每个模块的联系甚小（不好抽出共享service)。还考虑到SOA一些成本的问题。还是用比较本，但应该行之有效的方法解决，以下为解决方案。<br /><br /></font>
		</div>
		<div>
				<font face="Verdana">     产品背景：研发人员频繁的出差，主要是因为产品在各地市（移动，联通，网通，电信）的业务需求不同导致，需要在主版本上修改功能以满足各地市的需求。这样我们的产品无疑是湖北移动，湖北电信，福建电信，福建移动等等，各出一个版本。其实我们做了很大一部分重复的工作。我们的产品也就不能称为产品，而我们一直在做项目。<br /><br />     现在就可定制、可复用以节省开发成本提出一些我的想法。</font>
		</div>
		<div>
				<font face="Verdana">    </font>
		</div>
		<div>
				<font face="Verdana">     我想我们的产品应该面向组件，也就是说要松偶合，可复用，可定制。我们的平台（基础模块）只包括系统管理(用户、权限及公用工具、也可以用portal）一部分。而其他模块，像作业计划，值班管理，信息发布等等。每个都是一个单独可以部署在主版本（系统管理）的应用。而平台向外发布web servie接口以及也可以传统java方式调用，这些是可配的。这样可以做到每个模块各布署到单独的应用。如果这样我们可能还需要一个单点登陆（除portal）。这些工作是由研发人员进行控制。研发人员提供实施人员页面操作，实施人员通过配置可以将模块（组件也就是作业计划，值班管理）配到平台（基础模块）上。这样我们来维护一个组件库，组件库中包括各模块的应用。组件库的丰富是一个漫长的过程，也就是说，假如我们现在有一个福建移动的作业计划，而不满足福建电信的要求的，若需要新增功能，我想应该在原来版本上进行新增（由研发人员控制），若要修改功能，如果功能修改量比较小，而又对业务要求不是很合适。我们可以试着让项目经量说服客户。如果二义性比较大，这样我们可以在原来版本上新建一个版本，形成一个新版本。OK，现在我们有两个版本的作业计划了，随着时间的增加。我们的组件库越来越丰富。如果某个地市说要上产品一期，我们会拿出需求去比对，按照每个相应的组件去配置形成一个满足某地市的需要。而这些工作完全可以不用研发人员做。而这样，我们就实现了一个可定制的版本。如果这个地市要上二期，我们保持主版本的向后兼容，可以直接将新要上的模块挂上去。<br /><br />   目前面临的问题：<br />      1.平台（基础模块）要修改，会改动很多模块。而我的想法是，基础模块的修改应该保持向下兼容。若修改应明确记录，其我们的多个组件也应修改。这样才能使已经上线的产品可以很容易的升级或新增组件。<br />      2.需要有一个组件管理库，它用来管理组件，组件的版本，主要实现内容啦。修改组件的log，发布的组件啦。这是一个非常重要的事情。应该由研发人员撑控。<br /></font>
		</div>
		<div>
				<font face="Verdana">      总之主要面临的问题就是版本的管理。<br /><br />   我目前也只是构思。也希望听听各位的意见。希望能给出意见。可能我的思想很老套了，但确实可以解决我们现在的问题。</font>
		</div>
		<div>
				<font face="Verdana">
				</font> </div>
<img src ="http://www.blogjava.net/qujingbo/aggbug/87863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qujingbo/" target="_blank">曲静波</a> 2006-12-15 09:45 <a href="http://www.blogjava.net/qujingbo/archive/2006/12/15/87863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>excel模板检验与合并</title><link>http://www.blogjava.net/qujingbo/archive/2006/12/12/86322.html</link><dc:creator>曲静波</dc:creator><author>曲静波</author><pubDate>Tue, 12 Dec 2006 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/qujingbo/archive/2006/12/12/86322.html</guid><wfw:comment>http://www.blogjava.net/qujingbo/comments/86322.html</wfw:comment><comments>http://www.blogjava.net/qujingbo/archive/2006/12/12/86322.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/qujingbo/comments/commentRss/86322.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qujingbo/services/trackbacks/86322.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
				<span lang="EN-US" style="FONT-SIZE: 14pt">excel</span>
				<span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模板检验与合并</span>
				<span lang="EN-US" style="FONT-SIZE: 14pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为实现</span>
				<span lang="EN-US">excel</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的合并，需要对上传的</span>
				<span lang="EN-US">excel</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件进行格式的验证，格式主要包括表头信息的验证，为此引入模板概念，首先用户需要上传带表头信息的模板。然后由用户上传需要合并的</span>
				<span lang="EN-US">excel</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，这时就需要验证将要合并的</span>
				<span lang="EN-US">excel</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件是否与模板文件相符合。若符合可以合并，不符合给出提示。用户上传多个</span>
				<span lang="EN-US">excel</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件后，通过模板表头文件格式合并所有</span>
				<span lang="EN-US">excel</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该</span>
				<span lang="EN-US">jar</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包主要分为五个类，如下：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span>
						<o:p> </o:p>
						<br />
						<strong>
								<font face="宋体">com.boco.excel.ExcelException<o:p></o:p></font>
								<br />
						</strong>
				</span>
				<span style="FONT-SIZE: 10.5pt">
						<font face="宋体">
								<strong>自定义异常，在验证模板出错时，会抛出错误信息。供开发人员和用户使用。<span lang="EN-US"><o:p></o:p></span></strong>
						</font>
						<br />    </span>
				<br />
				<b>
						<span lang="EN-US">
								<font face="宋体">com.boco.excel.ExcelExceptionMsg<o:p></o:p></font>
								<br />
						</span>
				</b>
				<b>
						<font face="宋体">该类中全是常量，常量定义为自定义异常时提示的错误信息。<span lang="EN-US"><o:p></o:p></span></font>
						<br />    </b>
				<br />
				<b>
						<span lang="EN-US">
								<font face="宋体">com.boco.excel.ValidatorTemplate<o:p></o:p></font>
								<br />
						</span>
				</b>
				<span style="mso-bidi-font-weight: bold">
						<font face="宋体">该类主要验证模板表头格式的有效性。一般开发人员使用<span lang="EN-US">validator</span>方法就可以。具体参数说明请见<span lang="EN-US">api</span>使用说明。<span lang="EN-US"><o:p></o:p></span></font>
						<br />    </span>
				<br />
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US">
								<font face="宋体">public void validator(String excelPath, int rowSize) throws ExcelException<o:p></o:p></font>
								<br />      </span>
						<br />
				</b>
				<span style="mso-bidi-font-weight: bold">
						<font face="宋体">该方法主要验证：<span lang="EN-US"><o:p></o:p></span></font>
						<br />
				</span>
				<span lang="EN-US" style="mso-bidi-font-weight: bold">
						<font face="宋体">1</font>
				</span>
				<span style="mso-bidi-font-weight: bold">
						<font face="宋体">．判断每后一行的单元格个数要大于等于前一行的单元格个数。可以是塔型。如图一：<br /><br /><img height="122" alt="1.jpg" src="http://www.blogjava.net/images/blogjava_net/qujingbo/excelTemplateMatching/1.jpg" width="271" border="0" /><br /><br /></font>
						<font face="宋体">
								<span lang="EN-US">2</span>．判断最后一行的单元格数要与第一行的列数相等，如图一，第一行，列数是<span lang="EN-US">A</span>，<span lang="EN-US">B</span>，<span lang="EN-US">C</span>三列，为<span lang="EN-US">3</span>。而第三行最后一行的单元格数也就是说，<span lang="EN-US">A</span>格为<span lang="EN-US">1</span>，<span lang="EN-US">B</span>格为<span lang="EN-US">1</span>，<span lang="EN-US">C</span>格为<span lang="EN-US">1</span>。故相等。符合条件。</font>
						<br />
						<font face="宋体">
								<span lang="EN-US">
										<br />3</span>．判断<span lang="EN-US">sheet</span>，如<span lang="EN-US">sheet1,sheet3</span>均符合标准，而<span lang="EN-US">sheet2</span>不符合条件。则认为该模板无效。</font>
						<br />
						<font face="宋体">
								<span lang="EN-US">
										<br />4</span>．判断其中不得有空行，若有空行则不符合要求。如图二。<br /></font>
						<br />      <img height="198" alt="2.jpg" src="http://www.blogjava.net/images/blogjava_net/qujingbo/excelTemplateMatching/2.jpg" width="290" border="0" /><br />      <br /><font face="宋体">该类主要验证多个文件与模板是否匹配。开发人员主要使用以下方法：（具体参数说明见<span lang="EN-US">API</span>说明文档）</font><br /><font face="宋体">该方法主要验证：</font><br />     1.<font face="宋体">判断模板的表头列数与文件的表头列数是否相同。若不同则不符合。</font><br />   <font face="Courier New"> 2.</font><font face="宋体">判断模板表头格式的每个<span lang="EN-US">cell</span>是否与文件相符合，符合条件包括：合并单元格。</font></span>
				<span lang="EN-US">
						<font face="宋体">
								<strong>
										<br />
										<br />com.boco.excel.CombinationFileExcel<br /></strong>
						</font>
				</span>
				<font face="宋体">该类主要通过模板格式合并<span lang="EN-US">excel</span>文件<span lang="EN-US">,</span>开发人员主要使用以下方法：（具体参数说明见<span lang="EN-US">API</span>说明文档）</font>
				<br />
				<b style="mso-bidi-font-weight: normal">
						<br />
						<span lang="EN-US">
								<br />
								<font face="宋体">public void combination(String templatePath, String filePath[],String templFilePath, String newFilePath, int rowSize) throws Exception <o:p></o:p></font>
								<br />
						</span>
						<br />
				</b>
				<br />
				<font face="宋体">例如，要合并表三，表四。如图三、图四。</font>
				<br />
				<br />
				<br />
				<img height="222" alt="34.jpg" src="http://www.blogjava.net/images/blogjava_net/qujingbo/excelTemplateMatching/34.jpg" width="561" border="0" />
				<br />   <font face="宋体">最后合并内容如下：如图五</font><br />    <br />    <img height="336" alt="5.jpg" src="http://www.blogjava.net/images/blogjava_net/qujingbo/excelTemplateMatching/5.jpg" width="284" border="0" /><br /><br /><br /><font face="宋体">多个<span lang="EN-US">sheet</span>都会合并。</font><br /><span lang="EN-US"><br /></span><br /><font face="宋体"><br /><span lang="EN-US">OK!</span>附<span lang="EN-US">API</span>说明文档，<span lang="EN-US">JAR</span>包，及源码。<span lang="EN-US">com.boco.excel.test</span>包下的类有使如何使用<span lang="EN-US">API</span>的例子。</font><br /><br /><br /><br /><br />下载列表：<br /><br /><span lang="EN-US"><o:p><a href="/Files/qujingbo/jar包.rar" target="_blank">jar包.rar</a><br /><br />源码：<a href="/Files/qujingbo/project.rar">project.rar<br /></a></o:p></span></p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
				<span lang="EN-US">
						<o:p>
								<a href="/Files/qujingbo/api(javadoc)说明文档.rar">API说明文档</a>
						</o:p>
				</span>
		</p>
		<p> </p>
		<p> </p>
<img src ="http://www.blogjava.net/qujingbo/aggbug/86322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qujingbo/" target="_blank">曲静波</a> 2006-12-12 16:43 <a href="http://www.blogjava.net/qujingbo/archive/2006/12/12/86322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用ajax实现实施刷新</title><link>http://www.blogjava.net/qujingbo/archive/2006/10/16/75472.html</link><dc:creator>曲静波</dc:creator><author>曲静波</author><pubDate>Mon, 16 Oct 2006 11:46:00 GMT</pubDate><guid>http://www.blogjava.net/qujingbo/archive/2006/10/16/75472.html</guid><wfw:comment>http://www.blogjava.net/qujingbo/comments/75472.html</wfw:comment><comments>http://www.blogjava.net/qujingbo/archive/2006/10/16/75472.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/qujingbo/comments/commentRss/75472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qujingbo/services/trackbacks/75472.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">很多应用都有实施刷新的需求，用</span>
				<span lang="EN-US">html</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span>
				<span lang="EN-US">javascript</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的刷新方式都是全局刷新，客户能够明显感觉到闪动。介绍种</span>
				<span lang="EN-US">ajax</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实现在实施刷新技术。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span>
				<span lang="EN-US">xmlhttp.htm</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实时刷新，访问</span>
				<span lang="EN-US">
						<a href="http://127.0.0.1:7001/xmlhttp.jsp">http://127.0.0.1:7001/xmlhttp.jsp</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页面，由</span>
				<span lang="EN-US">xmlhttp.jsp</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页面写入随机数。<br /><br /></span>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">html</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">head</span>
				<span style="COLOR: #000000">&gt;&lt;</span>
				<span style="COLOR: #000000">title</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">test</span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">title</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">script language</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />function detect()<br /><img id="Codehighlighter1_85_456_Open_Image" onclick="this.style.display='none'; Codehighlighter1_85_456_Open_Text.style.display='none'; Codehighlighter1_85_456_Closed_Image.style.display='inline'; Codehighlighter1_85_456_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_85_456_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_85_456_Closed_Text.style.display='none'; Codehighlighter1_85_456_Open_Image.style.display='inline'; Codehighlighter1_85_456_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_85_456_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_85_456_Open_Text">
						<span style="COLOR: #000000">{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    xml </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> ActiveXObject(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">Microsoft.XMLHTTP</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    var post</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    xml.open(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">POST</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">http://127.0.0.1:7001/xmlhttp.jsp</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #0000ff">false</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    xml.setrequestheader(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">content-length</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">,post.length); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    xml.setrequestheader(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">content-type</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">application/x-www-form-urlencoded</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    xml.send(post); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    var res </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> xml.responseText; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    list.innerText</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">res; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">设置自动刷新时间</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    setTimeout(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">detect()</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">1000</span>
						<span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">script</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">body onload</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">detect()</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />test : <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">a id</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">list</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;&lt;/</span>
				<span style="COLOR: #000000">a</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">body</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">html</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<br />
		<br />
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font face="Times New Roman">xmlhttp.jsp</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">利用随机数测试<br /></span>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">&lt;%</span>
				<span style="COLOR: #000000">@ page </span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">java.util.Random</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">%&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">&lt;%</span>
				<span style="COLOR: #000000">@ page language</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">java</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> contentType</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/html;charset=gb2312</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">%&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">&lt;%</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    Random random</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Random();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    out.println(random.nextInt());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">%&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
<img src ="http://www.blogjava.net/qujingbo/aggbug/75472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qujingbo/" target="_blank">曲静波</a> 2006-10-16 19:46 <a href="http://www.blogjava.net/qujingbo/archive/2006/10/16/75472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用façade、template pattern搭建MVC框架</title><link>http://www.blogjava.net/qujingbo/archive/2006/10/16/75469.html</link><dc:creator>曲静波</dc:creator><author>曲静波</author><pubDate>Mon, 16 Oct 2006 11:34:00 GMT</pubDate><guid>http://www.blogjava.net/qujingbo/archive/2006/10/16/75469.html</guid><wfw:comment>http://www.blogjava.net/qujingbo/comments/75469.html</wfw:comment><comments>http://www.blogjava.net/qujingbo/archive/2006/10/16/75469.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/qujingbo/comments/commentRss/75469.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qujingbo/services/trackbacks/75469.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 网络上有很多介绍				MVC				的理论知识（至于理论知识，我们不多做介绍），我也看到了一些其他人员开发的基于				MVC				的框架。对此我也有些自己的见解。通过使用				façade,template,factory pattern				搭建了一个简易的				MVC				框架。																				 		...&nbsp;&nbsp;<a href='http://www.blogjava.net/qujingbo/archive/2006/10/16/75469.html'>阅读全文</a><img src ="http://www.blogjava.net/qujingbo/aggbug/75469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qujingbo/" target="_blank">曲静波</a> 2006-10-16 19:34 <a href="http://www.blogjava.net/qujingbo/archive/2006/10/16/75469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用state pattern替代if else</title><link>http://www.blogjava.net/qujingbo/archive/2006/10/15/75127.html</link><dc:creator>曲静波</dc:creator><author>曲静波</author><pubDate>Sat, 14 Oct 2006 16:10:00 GMT</pubDate><guid>http://www.blogjava.net/qujingbo/archive/2006/10/15/75127.html</guid><wfw:comment>http://www.blogjava.net/qujingbo/comments/75127.html</wfw:comment><comments>http://www.blogjava.net/qujingbo/archive/2006/10/15/75127.html#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://www.blogjava.net/qujingbo/comments/commentRss/75127.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qujingbo/services/trackbacks/75127.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 大多数开发人员现在还在使用if else的过程结构，曾看过jdon的banq大哥写的一篇文章，利用command,aop模式替代if else过程结构。当时还不太明白，这几天看了《重构》第一章的影片租赁案例，感触颇深。下面我来谈一谈为什么要用state pattern替代if else，替代if else有什么好处，以及给出详细代码怎么替代if else。本文参考jdon的“你还在使用if els...&nbsp;&nbsp;<a href='http://www.blogjava.net/qujingbo/archive/2006/10/15/75127.html'>阅读全文</a><img src ="http://www.blogjava.net/qujingbo/aggbug/75127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qujingbo/" target="_blank">曲静波</a> 2006-10-15 00:10 <a href="http://www.blogjava.net/qujingbo/archive/2006/10/15/75127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>