﻿<?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-Steady's Java Zone-随笔分类-AgileJava</title><link>http://www.blogjava.net/steady/category/11538.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 16 May 2007 14:35:18 GMT</lastBuildDate><pubDate>Wed, 16 May 2007 14:35:18 GMT</pubDate><ttl>60</ttl><item><title>Agile 随想</title><link>http://www.blogjava.net/steady/archive/2006/11/30/84466.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Thu, 30 Nov 2006 00:38:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2006/11/30/84466.html</guid><wfw:comment>http://www.blogjava.net/steady/comments/84466.html</wfw:comment><comments>http://www.blogjava.net/steady/archive/2006/11/30/84466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/steady/comments/commentRss/84466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steady/services/trackbacks/84466.html</trackback:ping><description><![CDATA[<p><font color=#000000 size=2>关于敏捷问题</font> </p>
<p><font color=#000000 size=2>周末听 rocket 介绍了一些来自 thoughtworks 关于敏捷的一些思想，同时也引发了大家的一些思考和讨论。从一种角度来看，</font> <a onclick="javascript:tagshow(event, 'Agile');" href="javascript:;" target=_self><u><strong><font color=#000000 size=2>Agile</font> </strong></u></a><font color=#000000 size=2>体现了一种软件开发最根本的问题，就是由人在一定的时间内开发出高质量的软件，Agile 更加注重人在整个活动里的作用，而传统的瀑布模型中，似乎更加注重文档等，也就是我过去所在的公司，一切开发都由文档驱动，在这样的情况下，团队中每个人都是可以被替代的，从某种意义上来说，降低了软件开发的风险，但是效率却很难提高。而 Agile 注重的一个方面就是 pair，通过拉近人与人之间的具体来加快信息在团队中的流转速度，使信息像水流一样源源不断的流动，这样在 change 发生时，能够得到更快的响应，而瀑布模型则需要慢慢的由文档传播开来，传递速度和面都比较有限。</font> </p>
<p><font color=#000000 size=2>虽然 thoughtworks 给了我们一个极具诱惑的 Agile 果子，某种意义上来说是建立在他们公司利益基础上的，真正的去做 Agile 需要更加清醒和理智的想问题。Agile 是一种实践的方法论，需要大量实践和经验才能真正的去理解它，另外一方面，从传统的开发方式转型至 Agile，多多少少都会有过去残留的痕迹，而这些看不见的痕迹，可能会暗暗的抹杀 Agile 最初承诺的效果。</font> </p>
<p><font color=#000000 size=2>Agile 是一种好东西，某种意义上，资本家从开发人员手里榨取了更大的价值，这是建立在效率提高基础之上的，但它却散发着无比的诱惑，或许大家希望自己少写一些文档，或许大家厌倦了瀑布模型的流程，或许。。。。</font> </p>
<img src ="http://www.blogjava.net/steady/aggbug/84466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2006-11-30 08:38 <a href="http://www.blogjava.net/steady/archive/2006/11/30/84466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>随 AgileJava iCustomer 改进想到的</title><link>http://www.blogjava.net/steady/archive/2006/08/21/64738.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Mon, 21 Aug 2006 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2006/08/21/64738.html</guid><wfw:comment>http://www.blogjava.net/steady/comments/64738.html</wfw:comment><comments>http://www.blogjava.net/steady/archive/2006/08/21/64738.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/steady/comments/commentRss/64738.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steady/services/trackbacks/64738.html</trackback:ping><description><![CDATA[<font color=#000000 size=2>&nbsp;&nbsp;&nbsp; 花了近一周的时间，把 iCustomer 大改了一番，其实说来也没有特别大的变化了，修改的东西只不过是一些过去的一些bug和网上朋友们的一些建议，其实重点还是放在改 bug 上，另外就是 Order 这部分系统的领域模型重构，Order 与 OrderItem 之间的关联由原来的 one-to-many 改成了现在的 composite-element 方式，参考了 Hibernate Reference 的内容，从理解上来说这样的关联方式也是比较合适的，有过去的松散的关联方式换成了现在这样紧密的关联方式。通过前面近两个月对 Hibernate 概念更深层次的思考与理解，现在在处理起这样的问题都变得轻松了很多，没有那么多的问题会很让我在开发中卡壳，而且是那种一卡就卡上个好几天不能解决的。当这样的关联关系复杂了以后，Hibernate 的功效才更好的发挥出来了，我们拿关联对象就不用再写一堆方法去拿了，需要的时候去取，Hibernate 就会自动的取帮你取好。实际上这次改 Order 部分时候，很多情况下都是在删过去的代码，过去的方式真的太复杂了，全部要自己手工一个个的去拿，简直就是把 Hibenate 当 SQL 用，从思想上来说，这显然是不正确的。<br><br>&nbsp;&nbsp;&nbsp; 另外想想看，如果在一个项目中用起 Hibernate 或者使用同样方式的 EJB3 Persistence 真的会存在着太多的风险了。Hibernate 走的是方式上的变革，我们必须去用新的思想去考虑问题，而不是仅仅用用它而已，我们需要从对象建模的角度就开始考虑 ORM 的存在，以对象为中心的方式去组织业务逻辑，而不是以表为中心去组织，刚开始用 Hibernate 的时候，大部分情况还是在考虑表如何如何的，但是用了一段时间以后，发现这样的方式和 Hibernate 真正的核心思想相差太大了。所以说要正确的去用 Hibernate 决不是看了一两本书，做了几个简单的 CRUD 就可以的了，需要在许多复杂关联中经受考验才可以，而一个要很好的去用 Hibernate 的项目，一定是要有这样经验的人去做才可以的，几个刚翻几页书，知道怎么用就去拿 Hibernate 做项目的人真的还是远远不够的，这种情况在 iCustomer 0.1 版本中表现的非常突出，混乱的配置和关联关系，让使用了 Hibernate 后，代码未减反增，我努力在 0.2 的版本中做出一些修改了，当然只是比原来好了一些，离真正理想的情况还是有差距的。当然有空我会把这样的一些经验和大家分享一下，让大家在学习 Hibernate 上少走一些我曾经走过的弯路了。<br><br>&nbsp;&nbsp;&nbsp; 又用回了 JSF，开始发现这样的方式真的有很多的好处了，而且在 JSF 的使用和经验上有一些积累，用它来建立一个不大的项目经验应该是足够的了。Backing Bean 的方式比 Action 的方式配置文件的数量上要减少了很多，说能够减少到原来的 1/4 甚至更多都不为过了，因为我们一般情况下一个 Backing Bean 对应一个页面，只需要配置一处，而一个页面中如果有很多操作的话 Action 方式就需要配置很多了，比如一个查询页面，查询需要一个 Action，查看查询的一个记录需要一个 Action，删除记录需要一个 Action，修改一条记录又需要一个 Action，算起来正好 1:4，是不是省了很多配置呢，在结合扩展的 Navigation 方式，连 Navigation 都不需要配置了。配置文件真的少了很多了。<br><br>&nbsp;&nbsp;&nbsp; 用到了一个 Tomahawk 组件中独有的 forceId 属性，不能说有多爽，但是可以让你在写 JavaScript 的时候省了好一些代码了，过去一个组件的 id 生成出来就是 form:cid 的形式，而用了 forcdId = "true" 后，生成出来的 id 就是你在组件的 Tag 中实际定义的值，当然用的时候也要小心了，千万不能重复，包括同一页面中不能重复，也包括一个页面中包含另外一个页面时不能重复 。</font> 
<img src ="http://www.blogjava.net/steady/aggbug/64738.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2006-08-21 11:15 <a href="http://www.blogjava.net/steady/archive/2006/08/21/64738.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AgileJava开源项目正式开始</title><link>http://www.blogjava.net/steady/archive/2006/06/05/50412.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Mon, 05 Jun 2006 01:00:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2006/06/05/50412.html</guid><wfw:comment>http://www.blogjava.net/steady/comments/50412.html</wfw:comment><comments>http://www.blogjava.net/steady/archive/2006/06/05/50412.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/steady/comments/commentRss/50412.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steady/services/trackbacks/50412.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">　　经过大约四个月的开发，和五位开发设计及美工人员的努力，AgileJava iCustomer 的第一个不是那么稳定的版本终于拿出来了，我们终于走出了我们的第一步，在这期间，我们也得到了很多朋友的支持和帮助，我们要感谢这些支持者的贡献。 </font>
		</p>
		<p>
				<font size="2">　　在这个阶段里，我们团队成员一起把我们研究 JSF, Spring, Hibernate，以及 Acegi 的成果都集中在这个项目中了。虽然很多东西都只是那么点点滴滴，但是在这期间有很多朋友在积极的帮助我们，参与我们的 OpenDoc 活动，把自己的宝贵时间分享出来，为大家带来了很多很好的文档，上周末，我们得到了 javascud 的大力支持，我们有了自己的 SVN，有了自己的 JIRA，这样的话，我们便可以建立我们自己的协作开发平台，让我们的经验和更多的朋友分享，同时，我们也欢迎更多的朋友能够参与到我们的开源活动中来，因为有了你们，我们才可以更壮大，因为有了你们，我们才可以更成熟，因为有了大家的齐心协力，我们才能为了一个共同的目标去奋斗，因为有了大家的协作，我们才会在共同努力中进步。 </font>
		</p>
		<p>
				<font size="2">　　开源也不是一句口号，我们只想用我们自己的行动来证明这一切，正因为我们是热爱开源的，所以我们才会去努力做的更好；正因为我们有着一个奋斗目标，我们才会孜孜不倦的去奋斗。此前 SpringSide 为我们做出了一个榜样，EasyJF 让我们梦想在自己的努力中实现，CowNew 也成为我们开源一个很好的先例，正是因为大家有这个梦想，有这些前辈们的努力，我们才看到国内开源的希望。 </font>
		</p>
		<p>
				<font size="2">　　其实我们更希望做到的，只是让新的技术能够更贴近实践了，让大家的实践能够更容易，让大家的开发能够更轻松，所以我们才从过去只是为了朋友做的一个小小的系统中找到方向，所以我们的开源团队名称叫做 AgileJava 就是为了让我们的开发更敏捷。 </font>
		</p>
		<p>
				<font size="2">　　下面我简单的介绍一下我们现在已有的系统和我们未来的目标： </font>
		</p>
		<p>
				<font size="2">　　AgileJava iCustomer 系统是一套开源的 CRM (客户关系管理) 系统，使用了新一代轻量级 J2EE 技术： JSF，Spring，Hibernate， Acegi 等作为系统的基础开发框架，力图打造一个轻快好用的 J2EE 应用。 </font>
		</p>
		<p>
				<font size="2">　　在系统开发过程中，我们同时将系统中的基础框架以及大量可以简化 J2EE 应用开发的组件从应用中抽取出来，并独立提供给广大开发人员，作为项目开发的基础框架，为大家进行快速开发提供支持。我们为该框架命名为 AgileJava Framework。 AgileJava Framework 的目标是致力于为广大开发者提供一个敏捷高效的 J2EE 快速平台。 </font>
		</p>
		<p>
				<font size="2">　　另一方面，我们将以此框架为基础，通过 Eclipse Plugin 的方式提供一套完整的基于代码生成的解决方案，用于快速生成应用的基础代码。该开发工具同样沿用我们 AgileJava 的名称，叫做 AgileJava Studio。 AgileJava Studio 将致力于减少开发工作中的重复劳动，给开发者带开更好的开发体验。 </font>
		</p>
		<p>
				<font size="2">　　我们将会将 AgileJava iCustomer， AgileJava Framework， AgileJava Studio 作为开源项目来运作，一方面建立一个完整的企业级的客户关系管理系统，另一方面建立一个为 J2EE 项目提供快速开发能力的基础框架和开发工具。 </font>
		</p>
		<p>
				<font size="2">　　因为国内的开源模式一直没有什么好的先例，并且开源的路线在国内因为一些误解方面的问题，一直没有很好的发展起来，虽然我们选择了开源，但是我们更多的希望只是通过一个完整的企业级应用的方式来探索开源的方向，并为我们中小型企业级应用打造一个方便易用功能强大的解决方案，用我们的实践带给所有参与者一些经验，无论是开源方面的经验，还是在轻量级 J2EE 应用开发的经验。虽然国内很多软件企业都在用这些技术，但因为版权的问题，无法和更多的朋友分享，所以我们更需要一个开放的交流环境，通过这样开源的方式，通过大家的努力，把我们在实践中的经验拿出来，和大家分享，共同促进我们软件开发的大环境的改善，共同提高大家的开发能力和开发水平。 </font>
		</p>
		<p>
				<font size="2">　　在这里，我们鼓励的是一种知识共享，通过这样的共享，我们把我们自己拥有的一份知识扩展到大家拥有的无数份知识。我们通过自己的实践，我们能够更深入的去了解了现有的各种技术的长与短，通过大家的交流与协作，我们在知识上互相弥补。通过这样的实践，我们不光是再做我们这个系统，更多的是我们有了更多的思想，更多的经验，我们有能力去打造更好的系统。 </font>
		</p>
		<p>
				<font size="2">　　我们目前采用了以 JSF, Spring, Hibernate 为中心的主体框架，并努力使之扩展到一个中小型商业应用所需要的主要技术领域，并使之更简单易用。 </font>
		</p>
		<pre>
				<font size="2"> 目前采用的技术：
 JSF (Myfaces Implement)，完整的视图层解决方案，一个标准的事件驱动的 MVC Framework。
 Spring Framework ： 其 IoC 容器为我们的业务对象控制带来了很大的便利。
 Hibernate 3 ： 目前最优秀，使用面最广的 ORM Framework。
 Acegi ： 一个基于 Spring 的通用 Security Framework。
 Quartz ： Java 世界最好也几乎是唯一的 Job Schedule 工具，为我们调度 Batch Job 提供了很大的便利。
 Shale ： struts 社区在 JSF 领域的重大贡献，以 JSF 为基础为我们提供了一系列好用的东西。
</font>
		</pre>
		<pre>
				<font size="2"> 预计后面准备采用的技术：
 Compass + Lucene ： Java 世界里最好用的开源 Search Engine 组合，Compass 使 POJO 能够更方便的去使用 Lucene 的底层引擎。
 BIRT ： Eclipse 社区贡献的一个重量级 BI 应用。当第一眼看到它时，就抛弃过去的 iReport + JasperReport 的组合了,够专业。
 Facelets ： 为 JSF 量身定做的模板框架，JSF 的 Fans 们不用再靠着 struts 的 tiles 也能活啦。
 AjaxAnywhere ： 不用写 JavaScript 也能 Ajax ，它为我们提供了这样的可能。
 ICE Faces Component : 当它的第一个beta版本出来的时候，我就对它颇有兴趣，或许是目前免费的 JSF 组件库中最好的 Ajax 实现了。
</font>
		</pre>
		<p>
				<font size="2">　　我希望能够有更多热爱开源的朋友加入到我们的行列中来，不论你来自何方，做着什么样的工作，只要我们有着开源的这个共同的目标，我们就可以共同的去为着自己的爱好，自己的理想，自己的信念所奋斗，记住，开源决不是三分钟的热度，需要你持之以恒的奋斗。 </font>
		</p>
		<div class="printfooter">
				<font size="2">　　如果你对我们的项目和活动有兴趣，欢迎加入我们的行列：<a href="http://www.agilejava.org/java/read.php?tid=378">http://www.agilejava.org/java/read.php?tid=378</a></font>
		</div>
		<!-- end content -->
<img src ="http://www.blogjava.net/steady/aggbug/50412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2006-06-05 09:00 <a href="http://www.blogjava.net/steady/archive/2006/06/05/50412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[iCustomer] 项目技术简介</title><link>http://www.blogjava.net/steady/archive/2006/05/26/48300.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Fri, 26 May 2006 04:52:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2006/05/26/48300.html</guid><wfw:comment>http://www.blogjava.net/steady/comments/48300.html</wfw:comment><comments>http://www.blogjava.net/steady/archive/2006/05/26/48300.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/steady/comments/commentRss/48300.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steady/services/trackbacks/48300.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/steady/archive/2006/05/26/48300.html'>阅读全文</a><img src ="http://www.blogjava.net/steady/aggbug/48300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2006-05-26 12:52 <a href="http://www.blogjava.net/steady/archive/2006/05/26/48300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>