<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[陈毓哲——学海无涯苦作舟 - 系统分析及设计]]></title>
<link>www.suneca.com/</link>
<description><![CDATA[说我想说的，做我想做的，写我想写的，我只是在自言自语。。。]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[yuzhechen@163.com(ZIZZ)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>陈毓哲——学海无涯苦作舟</title>
	<url>www.suneca.com/images/logos.gif</url>
	<link>www.suneca.com/</link>
	<description>陈毓哲——学海无涯苦作舟</description>
</image>

			<item>
			<link>www.suneca.com/article.asp?id=82</link>
			<title><![CDATA[应用系统框架的选择]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[系统分析及设计]]></category>
			<pubDate>Sun,28 Sep 2008 11:26:20 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=82</guid>
		<description><![CDATA[<span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用了Struts 2做过两个项目，开始对Struts 2厌烦了！以后，除了特殊的需要，我不会再使用Struts 2开发项目了。不是Struts 2这个框架不好，而是Struts 2我根本不需要用这么多。其实Struts 1.x对于我来讲已经是非常够用了，可能还多了呢。一个项目里面塞了N多个框架，Struts、Spring、Hibernate，其实对于学习成本来讲还是挺高的，团队每一个人素质不同，对框架的理解深度不同，其实框架多一个不如少一个。hibernate换不得，因为使用它实在是太方便了，我可以减化很多工作，Spring也没有办法换掉，对事务的支持，dao的支持，让我的工作量又可以减少。所以打算将web前框的MVC框架换掉。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;谈到Struts的维护，Struts应用于项目应用得多，维护得多，其实你会觉得Struts其实不是你想像的那么好。假如某个业务模块有bug，你要做的就是，查看一下是那个.do，然后根据这个path去找一下struts-config.xml文件，接着你才知道这个path所对应的action，接着你要找到相应的action，然后查看一下其逻辑实现，有时你还要看一下jsp的显示逻辑是否正确，那么你还要再看一下action所返回的ActionForward，根据名字，你要找到相应的forward，就是转向的jsp页面，再找到jsp页面，进行修改，有时它并不是forward到一个jsp，而是forward到另外一个action，那就更麻烦了。转来转去，跳来跳去，你会搞得很头晕。其实我现在写上面这些文章，我也写得头晕。假如你的团队开发规范做得比较好，你又参与了这个项目，并且这个模块是你实现的，那你可能不需要查看这么多直接就可以找到相应的业务对象或页面做改进，但有时，在中国做软件开发并不是这么理想化，有时就是这么郁闷。就算我现在在中国最大的垂直网站任职，也同样遇到这样的问题。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;对于struts、或者是webwork，可能往往action的命名跟jsp的命名规范不同，对于action的命名空间来讲，可能与最终的展示页面的路径不同。Struts与Webwork最大的毛病，就是它只写义了一个简单的开发规范，而没有办法去限制开发人员任意使用。一直以来，我最喜欢的框架就是tag library + jsp，因为我觉得它已经够用了。为什么要在一个项目里搞这么多框框架架干嘛。访问某一个path出问题了，因为这个path就是对应着一个jsp的位置，我直接就定位到那里去，jsp里面只有标签，可能复杂一点的话你在页面会有一点点jsp代码，但这个其实不防碍到你的阅读与维护。使用标签库，你可以最大限制的做到代码量的共用。对于组织结构控件、用户选择控制，工作流控件等等，其实使用标签库来实现，也挺理想的。Jstl标签库，已经提供了很多现成的，有用的标签库供你使用，事务处理方面同样有解决方案。其他的你可以考虑自己自己开发，开发一个标签库也非常容易，也降低了开发人员的学习成本与开发成本。将来有可能，你再开发一些类似于eclispe的插件，那使用拖拽的方式来进行开发，那速度更是飞快。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;这时间看了Spring 2.5的新功能，对annotation支持，让我开始喜欢上Spring MVC了，现在新的项目已经开始应用上Spring MVC了。Spring MVC总体的感觉就是非常简单，最让我觉得兴奋的一点就是，InternalResourceViewResolver的应用方面，在某种程度上，它起来了一个限作的作用。并且，使用了annotation，没有了烦人的配置文件。<br/>以下是使用Spring MVC Controller的一个例子：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><span style="color:#800000"><strong>package</strong></span> com<span style="color:#0000ff">.</span>suneca<span style="color:#0000ff">.</span>web<span style="color:#0000ff">;</span><br/><br/><span style="color:#800000"><strong>import</strong></span> java<span style="color:#0000ff">.</span>util<span style="color:#0000ff">.</span>List<span style="color:#0000ff">;</span><br/><br/><span style="color:#800000"><strong>import</strong></span> o&#114;g<span style="color:#0000ff">.</span>springframework<span style="color:#0000ff">.</span>beans<span style="color:#0000ff">.</span>factory<span style="color:#0000ff">.</span>annotation<span style="color:#0000ff">.</span>Autowired<span style="color:#0000ff">;</span><br/><span style="color:#800000"><strong>import</strong></span> o&#114;g<span style="color:#0000ff">.</span>springframework<span style="color:#0000ff">.</span>stereotype<span style="color:#0000ff">.</span>Controller<span style="color:#0000ff">;</span><br/><span style="color:#800000"><strong>import</strong></span> o&#114;g<span style="color:#0000ff">.</span>springframework<span style="color:#0000ff">.</span>ui<span style="color:#0000ff">.</span>ModelMap<span style="color:#0000ff">;</span><br/><span style="color:#800000"><strong>import</strong></span> o&#114;g<span style="color:#0000ff">.</span>springframework<span style="color:#0000ff">.</span>web<span style="color:#0000ff">.</span>bind<span style="color:#0000ff">.</span>annotation<span style="color:#0000ff">.</span>RequestMapping<span style="color:#0000ff">;</span><br/><span style="color:#800000"><strong>import</strong></span> o&#114;g<span style="color:#0000ff">.</span>springframework<span style="color:#0000ff">.</span>web<span style="color:#0000ff">.</span>bind<span style="color:#0000ff">.</span>annotation<span style="color:#0000ff">.</span>RequestParam<span style="color:#0000ff">;</span><br/><br/><span style="color:#800000"><strong>import</strong></span> com<span style="color:#0000ff">.</span>suneca<span style="color:#0000ff">.</span>base<span style="color:#0000ff">.</span>BaseController<span style="color:#0000ff">;</span><br/><span style="color:#800000"><strong>import</strong></span> com<span style="color:#0000ff">.</span>suneca<span style="color:#0000ff">.</span>entity<span style="color:#0000ff">.</span>User<span style="color:#0000ff">;</span><br/><span style="color:#800000"><strong>import</strong></span> com<span style="color:#0000ff">.</span>suneca<span style="color:#0000ff">.</span>service<span style="color:#0000ff">.</span>UserService<span style="color:#0000ff">;</span><br/><br/><br/>@Controller<br/><span style="color:#800000"><strong>public</strong></span> <span style="color:#800000"><strong>class</strong></span> UserController <span style="color:#800000"><strong>extends</strong></span> BaseController <span style="color:#0000ff">{</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>final</strong></span> <span style="color:#800000"><strong>static</strong></span> String NAMING_SPACE <span style="color:#0000ff">=</span> <span style="color:#0000CC">&#34;/system/user/&#34;</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@Autowired<br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>private</strong></span> UserService userService<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@RequestMapping<span style="color:#0000ff">(</span>NAMING_SPACE <span style="color:#0000ff">+</span> <span style="color:#0000CC">&#34;list.html&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> String listUsers<span style="color:#0000ff">(</span>ModelMap model<span style="color:#0000ff">)</span> <span style="color:#800000"><strong>throws</strong></span> Exception <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;List<span style="color:#0000ff">&lt;</span><span style="color:#0000ff">?</span><span style="color:#0000ff">&gt;</span> users <span style="color:#0000ff">=</span> userService<span style="color:#0000ff">.</span>listUsers<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;model<span style="color:#0000ff">.</span>addAttribute<span style="color:#0000ff">(</span><span style="color:#0000CC">&#34;users&#34;</span><span style="color:#0000ff">,</span> users<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> NAMING_SPACE <span style="color:#0000ff">+</span> <span style="color:#0000CC">&#34;list&#34;</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@RequestMapping<span style="color:#0000ff">(</span>NAMING_SPACE <span style="color:#0000ff">+</span> <span style="color:#0000CC">&#34;cr&#101;ate.html&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> String cr&#101;ateUser<span style="color:#0000ff">(</span>ModelMap model<span style="color:#0000ff">)</span> <span style="color:#800000"><strong>throws</strong></span> Exception <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;User user <span style="color:#0000ff">=</span> <span style="color:#800000"><strong>new</strong></span> User<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;model<span style="color:#0000ff">.</span>addAttribute<span style="color:#0000ff">(</span><span style="color:#0000CC">&#34;user&#34;</span><span style="color:#0000ff">,</span> user<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> NAMING_SPACE <span style="color:#0000ff">+</span> <span style="color:#0000CC">&#34;form&#34;</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@RequestMapping<span style="color:#0000ff">(</span>NAMING_SPACE <span style="color:#0000ff">+</span> <span style="color:#0000CC">&#34;up&#100;ate.html&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> String up&#100;ateUser<span style="color:#0000ff">(</span>@RequestParam<span style="color:#0000ff">(</span><span style="color:#0000CC">&#34;id&#34;</span><span style="color:#0000ff">)</span><span style="color:#800000"><strong>long</strong></span> id<span style="color:#0000ff">,</span>ModelMap model<span style="color:#0000ff">)</span> <span style="color:#800000"><strong>throws</strong></span> Exception <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;User user <span style="color:#0000ff">=</span> userService<span style="color:#0000ff">.</span>findUserById<span style="color:#0000ff">(</span>id<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;model<span style="color:#0000ff">.</span>addAttribute<span style="color:#0000ff">(</span><span style="color:#0000CC">&#34;user&#34;</span><span style="color:#0000ff">,</span> user<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> NAMING_SPACE <span style="color:#0000ff">+</span> <span style="color:#0000CC">&#34;form&#34;</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@RequestMapping<span style="color:#0000ff">(</span>NAMING_SPACE <span style="color:#0000ff">+</span> <span style="color:#0000CC">&#34;save.html&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> String saveUser<span style="color:#0000ff">(</span>User user<span style="color:#0000ff">)</span> <span style="color:#800000"><strong>throws</strong></span> Exception <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;userService<span style="color:#0000ff">.</span>saveUser<span style="color:#0000ff">(</span>user<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> REDIRECT <span style="color:#0000ff">+</span> NAMING_SPACE <span style="color:#0000ff">+</span> <span style="color:#0000CC">&#34;list.html&#34;</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@RequestMapping<span style="color:#0000ff">(</span>NAMING_SPACE <span style="color:#0000ff">+</span> <span style="color:#0000CC">&#34;del&#101;te.html&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> String del&#101;teUser<span style="color:#0000ff">(</span>@RequestParam<span style="color:#0000ff">(</span><span style="color:#0000CC">&#34;id&#34;</span><span style="color:#0000ff">)</span><span style="color:#800000"><strong>long</strong></span> id<span style="color:#0000ff">)</span> <span style="color:#800000"><strong>throws</strong></span> Exception <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;User user <span style="color:#0000ff">=</span> userService<span style="color:#0000ff">.</span>findUserById<span style="color:#0000ff">(</span>id<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;userService<span style="color:#0000ff">.</span>del&#101;teUser<span style="color:#0000ff">(</span>user<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> REDIRECT <span style="color:#0000ff">+</span> NAMING_SPACE <span style="color:#0000ff">+</span> <span style="color:#0000CC">&#34;list.html&#34;</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span></div></div><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;假如你访问的url是:<a href="http://www.suneca.com/system/user/del" target="_blank" rel="external">http://www.suneca.com/system/user/del</a>&#101;te.html<br/>那么它将自动定位到UserController的del&#101;teUser()方法上（@RequestMapping(&#34;/system/user/del&#101;te.html&#34;)这个注解起作用），并且自动将参数带过关来的id自动转化long型赋值给id，执行删除完之后，重定向到/system/user/list.html这个地址上。<br/>&nbsp;&nbsp;&nbsp;&nbsp;假如你访问的url是:<a href="http://www.suneca.com/system/user/list.html" target="_blank" rel="external">http://www.suneca.com/system/user/list.html</a>，那么它将自动定位到UserController的listUser()方法上(@RequestMapping(&#34;/system/user/list.html&#34;)这个注解起作用)，并且，执行相应查询之后，转到WEB-INF/pages/system/user/list.jsp页面上做显示。<br/>之所以能够做到这些，主要也是因为InternalResourceViewResolver起了非常关键的作用。以下是InternalResourceViewResolver的配置<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span>bean id<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;jspViewResolver&#34;</span> class<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;org.springframework.web.servlet.view.InternalResourceViewResolver&#34;</span><span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span>property name<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;viewClass&#34;</span> value<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;org.springframework.web.servlet.view.JstlView&#34;</span><span style="color:#0000ff"><strong>/</strong></span><span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span>property name<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;prefix&#34;</span> value<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;/WEB-INF/pages/&#34;</span><span style="color:#0000ff"><strong>/</strong></span><span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span>property name<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;suffix&#34;</span> value<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;.jsp&#34;</span><span style="color:#0000ff"><strong>/</strong></span><span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span><span style="color:#0000ff"><strong>/</strong></span>bean<span style="color:#0000ff"><strong>&gt;</strong></span>&#160;&#160;&#160;&#160;</div></div>]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=67</link>
			<title><![CDATA[中小型企业纯开源免费工具的解决方案]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[系统分析及设计]]></category>
			<pubDate>Fri,04 Jul 2008 23:58:05 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=67</guid>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在在国内很多公司，软件版权的问题越来越看中。版权得到重视，也可以看得出我们人民对知识产权的看法有了很多改进，知识产权越来越得到人们的重视！<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中小型企业的应用系统一般在开发成本、部署成本方面投入都是比较小，那如果从开发到生产，不使用商业化的软件，那应该怎么办呢？现在因为公司上市了，对于商业软件已经公司范围内禁止使用。对于我这个习惯了使用Rose、PowerDesigner来进行设计建模的人来讲，确实是比较痛苦！好了，介绍一些免费开源的东东先！<br/><strong>第一、技术框架</strong><br/>做java的大部分技术框架都是开源的，struts、spring、hibernate、torque、jstl、oscache<br/><br/><strong>第二、开发工具</strong><br/>首先eclispe jee（eclipse + wtp） + jboss tools<br/>备选netbeans ide<br/><br/><strong>第三、数据库</strong><br/>首先mysql（mysql对付中小型企业来讲，完全已经可以应付得来）<br/>当然也可以使用oracle 10 EX，不过，使用它等于中了圈套，只支持单个CPU、1G内存，最大4G存储容量<br/>或者是Microsoft SQL Server 2005 Express 1 ，不过，基本上都是有限制。<br/>使用oracle或microsoft的免费数据库产品，除非是打算日后花重金去买他们的产品，否则，建议不要使用<br/><br/><strong>第四、项目管理以及设计工具</strong><br/>设计工具：首选staruml，一个非常易用，非常容易上手的工具，功能非常不错<br/>思维图：FreeMind，一个使用java写的，功能简单但是非常实用的工具（操作与MindJet差不多）。<br/>项目管理工具：OpenWorkBench<br/>文档编辑工具：OpenOffice<br/>数据库建模工具：DBDesigner，界面比较丑，但支持多种数据库。也可以使用ModelRight3 Community Edition，ModelRight3分为专业版以及免费版。<br/><br/><strong>第五、操作系统</strong><br/>Red Hat或者ubuntu都是非常不错的操作系统<br/><br/><strong>第六、应用服务器</strong><br/>Tomcat、Jboss、Apache<br/>如果只是使用到jsp功能，那tomcat够用了<br/>如果需要使用到j2ee，那就使用jboss<br/>部署使用apache + tomcat的整合模式<br/><br/><strong>第七、软件版本管理</strong><br/>Server：cvsserver<br/>Client：eclipse自带<br/><br/><strong>第八、压力测试工具</strong><br/>Apache JMeter，压到你机器死掉都不成问题<br/><br/><strong>第九、单元测试工具</strong><br/>JUnit<br/><br/><strong>第十、缺陷跟踪管理系统</strong><br/>Bugzilla]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=52</link>
			<title><![CDATA[使用PowerDesigner 的Hibernate O/R Mapping功能简介]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[系统分析及设计]]></category>
			<pubDate>Mon,31 Mar 2008 21:59:07 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=52</guid>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;对于很多使用过PowerDesigner的人来讲，他们使用PowerDesigner就是使用它来进行数据库物理建模，创建数据库表对象、建立表与表之间的关联关系、创建索引，最后，使用PowerDesigner的Generate DataBase功能生成数据库的DDL语句，最后，将这些DDL语句使用数据库工具进行导入。使用再高级一点的话，我们还可以创建数据源，并在PowerDesigner建立与数据源的连接后，最后，直接通过Generate DataBase的ODBC Generation功能直接在数据库当中建表、建外键、建约束、建索引等数据库对象。<br/>&nbsp;&nbsp;&nbsp;&nbsp;PowerDesigner对很多很多应用服务器，外部工具，开源框架有着很好的支持，这个是PowerDesigner的最大优势。默认情况下，这些扩展模块都没有启用，我们可以使用<strong>Extended Model</strong>来启用相应的模块支持，比如Hibernate。这篇文章将使用<strong>Object-Oriented Model</strong>结合Physical Data Model，并启用<strong>Hibernate Extended Model</strong>来进行建模，并最终生成相应的<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">Java</a>代码、Hiberante配置文件和映射文件、DataBase DDL语句等。<br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>首先</strong>：我们先创建新的<strong>Object-Oritented Model</strong>，将Object Language选项当中<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">Java</a>，First diagram选择为<strong>Class Diagram</strong>，如下图所示：<br/><br/><img src="www.suneca.com/attachments/month_0803/l2008331215335.jpg" border="0" alt=""/><br/><br/>配置完后，点击<strong>Extended Model Definitions</strong>面板，在扩展的模型当中选择Hiberante，最后点击确定按钮，如下图所示：<br/><br/><img src="www.suneca.com/attachments/month_0803/92008331215549.jpg" border="0" alt=""/><br/><br/>&nbsp;&nbsp; <strong> 第二</strong>，在<strong>Class Diagram</strong>当中创建一个新的Package，取名为zizz，并进入zizz package当中的Class Diagram，创建新的Class，新的Class名为User，并在User当中创建新的attribute，如下图所示：<br/><br/><img src="www.suneca.com/attachments/month_0803/l2008331215754.jpg" border="0" alt=""/><br/><br/>&nbsp;&nbsp; <strong> 第三</strong>，创建新的<strong>Physical Data Model</strong>，创建可以有两种方式：第一种是通过File--&gt;New创建新的<strong>Physical Data Model</strong>；第二种是通过PowerDesigner提供的Model Transfer功能，将<strong>Class Diagram Model</strong>转化为<strong>Physical Data Model</strong>，以下图表显示出PowerDesigner当中Model的关联关系：<br/><br/><img src="www.suneca.com/attachments/month_0803/g2008331215851.gif" border="0" alt=""/><br/><br/><strong>第一种方式</strong>：点击File--&gt;New，在弹出的对话框当中选择Physical Data Model，选择相应的数据库，本次采用的是<a href="http://www.suneca.com/default.asp?cateID=8" target="_blank">Oracle</a> 10g数据库，最后点击确定，如下图所示：<br/><br/><img src="www.suneca.com/attachments/month_0803/d200833122137.jpg" border="0" alt=""/><br/><br/>接着，在Physical Diagram当中创建新的数据库表，表名为：T_USRE，表列的描述如下图所示：<br/><br/><img src="www.suneca.com/attachments/month_0803/c20083312258.jpg" border="0" alt=""/><br/><br/><strong>第二种方式</strong>是使用PowerDesigner的<strong>Model Transfer</strong>功能，将<strong>Object-Oriented Model</strong>转化为<strong>Physical Data Model</strong>。点击<strong>Tools--&gt;Generate Physical Data Model</strong>菜单，在弹出的对话框当中选择相应的数据库。如下图所示：<br/><br/><img src="www.suneca.com/attachments/month_0803/0200833122544.jpg" border="0" alt=""/><br/><br/>PowerDesigner将会自动为我们创建一个新的<strong>Physical Data Model</strong>，并且，自动创建了一张名为User的表，并且自动创建列。创建结果如下图所示：<br/><br/><img src="www.suneca.com/attachments/month_0803/i200833122610.jpg" border="0" alt=""/><br/><br/>创建完之后，我们应该按照我们的命令规范对我们的表名、列名做相应的修改，最后，还要将数据精度做一下调整。PowerDesigner的<strong>Model Transfer</strong>功能非常强大，它不仅能够帮我们创建一个新的数据库物理数据模型，还可以帮我们更新相应的数据库物理模型。<br/>本次将使用第一种创建Physical Data Model的方式。<br/><strong>第四</strong>，打开<strong>Class Diagram</strong>视图，双击<strong>User Class</strong>，将弹出如下对话框<br/><br/><img src="www.suneca.com/attachments/month_0803/b200833122736.jpg" border="0" alt=""/><br/><br/>点右右下角的More，将所有标签页显示出来，在标签页当中选择Mapping，如下图所示：<br/><br/><img src="www.suneca.com/attachments/month_0803/s200833122830.jpg" border="0" alt=""/><br/><br/>点击创建按钮图标，创建新的数据源（这里指的数据源即新建的数据库物理数据模型），弹出的对数据源创建向导话框，在对话框当中的<strong>Data Source</strong>输入任意的名称，如你的项目名称，如下图所示：<br/><br/><img src="www.suneca.com/attachments/month_0803/c200833122916.jpg" border="0" alt=""/><br/><br/>点击“下一步”按钮，在弹出的对话框当中选择我们创建的<strong>Physical Data Model</strong>，接着，点击“完成”按钮，如下图所示。<br/><br/><img src="www.suneca.com/attachments/month_0803/t200833122950.jpg" border="0" alt=""/><br/><br/>点击完成按钮后，将弹出如下对话框，在对话框当中选择User对象的Mapping表格，最后点击“<strong>确定</strong>”按钮。<br/><br/><img src="www.suneca.com/attachments/month_0803/o200833122123.jpg" border="0" alt=""/><br/><br/>在新的Mapping当中，我们可以看到，对象User将会Mapping到T_USER表。那数据库列应该怎么进行映射呢？假如数据库的列名跟对象的属性名一致，那我们可以不需要进行列的配置，因为Hibernate本身就可以支持这一点，那如果列不一致呢？那我们应该怎么办？在powerdesigner配置可以有两种方式，<strong>第一种，通过attribute mapping进行映射</strong>，如下图所示：<br/><br/><img src="www.suneca.com/attachments/month_0803/s2008331221235.jpg" border="0" alt=""/><br/><br/><strong>第二种是通过Mapping Editor来建立数据库列与类属性之间的映射</strong>。点击：<strong>tools--&gt;Mapping Editor</strong>，将弹出如下的对话框：<br/><br/><img src="www.suneca.com/attachments/month_0803/q200833122136.jpg" border="0" alt=""/><br/><br/>选择某一列，从左边拉到右边的指定列，将自动建立列与属性的关联关系，最后点击确定“按钮”。如下图所示：<br/><br/><img src="www.suneca.com/attachments/month_0803/o2008331221326.jpg" border="0" alt=""/><br/><br/>最后，我们可以从Mapping当中看到数据库列与类属性的映射关系。如下图所示<br/><br/><img src="www.suneca.com/attachments/month_0803/y200833122144.jpg" border="0" alt=""/><br/><br/><strong>第五</strong>，生成代码。点击<strong>Language--&gt;Generate <a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">Java</a> Code</strong>生成<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">Java</a>代码。在弹出的对话框Option标签当中选择需要生成的类型及在Generated Files选择生成的代码，将可以自动生成代码，如下图所示：<br/><br/><img src="www.suneca.com/attachments/month_0803/u2008331221434.jpg" border="0" alt=""/><br/><br/><br/><img src="www.suneca.com/attachments/month_0803/k2008331221441.jpg" border="0" alt=""/><br/>]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=47</link>
			<title><![CDATA[项目经理、系统架构师或技术骨干应该具备的水平]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[系统分析及设计]]></category>
			<pubDate>Thu,17 Jan 2008 15:35:15 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=47</guid>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一直想写一篇这样的总结性文章，但不是没有时间就是没有勇气写下去，因为怕别人丢臭鸡蛋。这两天有时间，终于鼓起勇气，将这篇文章写来下！也希望对一些正在寻找更好发展的朋友能有点帮助，也希望对于一些技术跟管理方面的牛人，能给予一些建议。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作为一名项目经理、系统架构师或技术骨干，其水平如何，关系到公司的项目管理、软件质量管理等方面的问题。项目经理或技术骨干应该要起带头作用，使整个团队的开发及管理能达到一种更高的水平。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那作为一名项目经理或公司技术骨干应该学会那些工具及知识点呢？涉及到这一块的工具及技术点非常多，如何去选择，是摆在项目经理、系统架构师跟技术骨干面前的问题。根据公司及团队的情况，选择合适的工具或技术框架，这一点非常重要。在项目的不同阶段，需要有不同的工具来支持。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;按照软件系统的生命周期的六个阶段，一般分为需求分析阶段、系统设计阶段、系统开发阶段、软件测试阶段、系统发布阶段、系统维护阶段，这几个阶段都需要有不同工具的支持。<br/><br/><span style="font-size:12pt;line-height:100%;"><span style="color:Red"><strong>一、需求分析阶段：</strong></span></span><br/><strong>第一、项目管理及需求管理工具</strong><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;项目管理工具很多公司都在使用，为什么要使用这些工具？假如没有使用这些工具，而是使用Excel或Word进行记录，那当需求变更？需求实现情况的跟踪？软件是否能按时交付？将是一件非常烦锁且容易出错的事情。一个软件项目、开发团队能否获得成功，管理非常关键。比较有名的商业化工具有：<strong>MicroSoft Project Server</strong>及<strong>Project 2003</strong>、<strong>IBM Rational RequisitePro</strong>、<strong>JIRA</strong>、<strong>PowerDesinger</strong>。比较有名的开源需求管理工具包括：<strong>OSRMT(Open Source Requirements Management Tools)</strong>、<strong>Xplanner</strong>、<strong>Openworkbench</strong>等等。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;很多软件公司都会使用<strong>SharePoint</strong>，在<strong>SharePoint</strong>平台上，只要你想得到，基本上都可以通过配置方式来满足你的业务需求。在<strong>SharePoint</strong>上，可以跟<strong>MicroSoft Project Server</strong>很好的结合，再配置<strong>Project 2003</strong>为客户端，进行公司的项目管理。也许对<strong>Project</strong>操作习惯的问题，在Web界面进行项目管理的时候，总觉得很不方便。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>IBM Rational RequisitePro</strong>（<a href="http://www.ibm.com" target="_blank" rel="external">http://www.ibm.com</a> ）可以算是最骨灰级的一个软件了，假如你公司整个软件生命周期管理都是采用IBM的解决方案，那使用<strong>RequisitePro</strong>是一个非常好的解决方案。需要这些软件可以到<strong>IBM</strong>官方网站上去下载一个最新版本，或者在电驴上面下载一些“特别”版本。设计工具、管理工具的完美结合，这个正是<strong>IBM Rational RequisitePro</strong>的强项。<strong>RequisitePro</strong>跟<strong>Offce</strong>结合得也是非常完美。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>JIRA</strong>（<a href="http://www.atlassian.com" target="_blank" rel="external">http://www.atlassian.com</a> ）原来只是一个缺陷跟踪系统，你可以在JIRA上面创建新的<strong>ISSUE</strong>，当<strong>ISSUE</strong>分配给某个程序员时，系统会自动发送一封邮件给该程序员，提示有新的BUG。<strong>JIRA</strong>也有提供一个<strong>Eclipse</strong>插件，你可以在Eclipse上面，查到属于自己的ISSUE，并快速解决。现在<strong>JIRA</strong>也可以用来做项目管理，在操作方面非常人性化，个人一直非常喜欢使用JIRA来进行项目管理、缺陷管理，再结合Eclipse，简直就是完美！但作为商业的软件，价格也非常贵，互联网上也有很多Crack，大家有兴趣也可以搜一下。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>OSRMT</strong>（<a href="http://sourceforge.net/projects/osrmt" target="_blank" rel="external">http://sourceforge.net/projects/osrmt</a> ）是一个开源的需求管理工具，分为客户端跟服务器，也提供了一个安装界面供用户安装，做开源的已经算是做得非常完美了。当前最新版本是V1.5，有兴趣的朋友可以下载一个最新版本玩一下，操作还算是挺人性化的。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Xplanner</strong>（<a href="http://www.xplanner.org" target="_blank" rel="external">http://www.xplanner.org</a> ）是一个开源的，基于XP编程的项目管理软件，它可以帮我们生成一些统计图表。这个软件从06年底发布0.7b7版后，就再也没有更新过了，我对开源工具的看法就是：版本号没有超过1.0版，我都不会应用于生产！对于Xplanner，也是停留在试用的阶段。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Openworkbench</strong>（<a href="http://www.openworkbench.org" target="_blank" rel="external">http://www.openworkbench.org</a> ）也是一个开源的项目管理软件，其功能跟Project 2003相似，是一个值得大家去使用的一个工具，但对于中国很多软件公司，都是使用特别版的Project 2003。假如你很尊重版权，又不想使用Project 2003，那Openworkbench是一个非常好的选择。<br/><br/><strong>第二、需求分析工具</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;需求分析工具用得比较多可能就是<strong>Rational Rose</strong>、<strong>MicroSoft Visio</strong>或<strong>MindManager</strong>，一般我们使用<strong>Rational Rose</strong>来进行用例分析，画用例图，画状态图；使用MicroSoft Visio来画出应用系统的结构图、流程图等。当然，对于MicroSoft Visio能画出来的东西，其实<strong>Rose</strong>也一样可以实现，只是，大家都是这么干，我们也没有必要专门去做一些特例的东西，特别是对于一些比较特殊的公司及行业。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Ration Rose 2003</strong>是一个值得怀念的工具，至今还是有很多公司跟个人都是使用，个人觉得这个软件版本算是最经典的一个，但对于现在所见即所得的要求下，使用Rose 2003，可能没有办法满足你，因为它需要经过一些小操作才能满足你的要求。但不可否认，它是一个非常优秀的软件。现在对于一些喜欢使用新工具新技术的程序员，也许现在他们正在使用RSA。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>MicroSoft Visio</strong>（<a href="http://www.microsoft.com" target="_blank" rel="external">http://www.microsoft.com</a> ）是每个搞设计的人都会用的一个工具，我们一般使用Visio来画系统结构图、关键流程图、系统部署结构图等。MicroSoft Visio也提供了UML的功能，可以用它来画用例图、类图、状态图，时序图等，但一般这个功能很少使用。至少我基本上不用。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>MindManager</strong>（<a href="http://www.mindjet.com" target="_blank" rel="external">http://www.mindjet.com</a> ）是一个非常好用的工具，我们用来描述我们的思维，很多人都不喜欢通过软件来描述，而是通过一张纸，然后在上面进行涂鸦，接着跟客户或团队进行思维沟通。MindManager很好地解决了这个问题。MindManager跟Office结合得非常完美，可以生成Word、Excel、PDF等文件。这个工具是我一直在使用的一个软件，非常好用。最新版本为7，大家有兴趣可以下载一个试用一下，也可以在网搜搜索一些“特别”版本。<br/><br/><span style="font-size:12pt;line-height:100%;"><span style="color:Red"><strong>二、系统设计阶段：</strong></span></span><br/><strong>第一、系统设计工具</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;主流的系统设计工具有大家非常熟悉的Rose2003，不过，现在已经不叫Rose了，现在IBM最新的设计工具是RSA（Ration Software Architect），Borland Together，SyBase PowerDesinger，MicroSoft Visio，对于开源的系统设计工具也有很多，比如ArgoUML、DBDesigner等等。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>RSA</strong>（<a href="http://www.ibm.com" target="_blank" rel="external">http://www.ibm.com</a> ）：IBM最新的设计工具，它是一个基于Eclipse平台的一个工具，对于你使用RSA，那也许你会将你的整个团队的工具都采用IBM的整套解决方案，使用RequisitePro来进行需求管理、使用RSA来进行建模、使用ClearCase来进行配置管理、使用ClearQuest来进行缺陷跟踪、使用RFT(Rational Functional Tester)来进行测试……RSA有一个最大的优点，那就是跟Word结合得非常好。这一点可以肯定。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Together</strong>（<a href="http://www.borland.com" target="_blank" rel="external">http://www.borland.com</a> ）：Borland公司的NB的设计工具，Together 2006版本也是一个基于Eclipse平台的软件，功能也是非常强大，其所见所得的功能，是我非常喜欢它的一个原因。还有一个原因就是基于Eclipse平台，这个可以跟我的开发工具很完美地整合在一起。不过，整合要注意一个问题，那就是Eclipse兼容性问题，这一点是非常烦人的。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>PowerDesigner</strong>（<a href="http://www.sybase.com" target="_blank" rel="external">http://www.sybase.com</a> ）： PowerDesigner是“一站式”建模与设计解决方案，物理数据模型的数据库平台无关性，所见即所得，反向工程，报表生成等等功能，使得它成为数据库设计人员心目中最好的产品，它的易用性深深地吸引了我！特别它的Repository模型库的功能，更让我们实现了模型设计的版本控制。最新的PowerDesigner，使得我觉得它是一件艺术品。做设计的人员一般会使用PowerDesigner来进行数据库物理模型设计，它是我心目中的首选工具。之前曾经对比过RSA、Together、ERWin的数据库模型设置工具，最终我还是更加喜欢使用PowerDesigner，也许，我的操作习惯已经被PowerDesigner腐蚀。<br/><br/><strong>第二、开发的技术框架</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;技术框架的选择是非常关键，一个好的技术框架，可以让我们的开发更加快速、团队的分工更加合理、系统能够支持多种数据库平台、我们的维护更加方便。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Web前端MVC框架是<strong>Struts 2</strong>。Struts 2可以说是Struts穿上了WebWork的外衣，其内核大部分都是采用了WebWork的技术，并且基于AOP的设计思想，让我们在软件设计上的能够更加多地体现“高内聚，低耦合”的设计思想。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">J2EE</a>框架是<strong>Spring</strong>，作为一个开源的<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">J2EE</a>框架，虽然它没有太多的新技术点，但它的整合性，拿得我们的开发更加简单，IOC、AOP、事务处理、开源框架的整合支持等等，使得作为一个<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">J2EE</a>框架的首选。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;持久层框架是<strong>Hibernate</strong>，作为一个开源的项目，我想，没有一个开源项目的社区能够你Hibernate一样，丰富的文档，活跃的社区，基于Hibernate的开发团队的庞大，使得它作为持久层框架的首先。基于 Hibernate，我们可以开发出数据库平台无关性的产品。但是，Hibernate也有自身的问题，假如使用不当，也许会有所失控，一旦失控，它所带来的，就是性能问题。对于最新的Hibernate3，存储过程的支持，外部SQL的定制，很好地解决了这个问题。但在关联关系上，使用还是要小心为好。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;页面框架，可以多考虑使用DIV技术、JSTL标签库、Struts 2标签库、DWR、AJAX、XML+XSLT等技术来让我们页面更好维护，使用OSCache缓存技术来提高我们页面的访问速度。<br/><br/><strong>第三、开发规范的定制</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;文件命名规范、数据库设计规范、编码规范、团队协作规定等等一些规范性的东西，需要在系统开发前就规定好，并且做相应的培训。QA也要做好监督的作用，定期做评审工作，对已发生的问题及可能出现的问题，及早发现，及早处理。<br/><br/><strong>第四、开发工具的选择</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;团队一定要选择同样的开发工具，开发工具相同，软件版本相同。为什么要这样子做，其实假如你作为一个Team Leader，你会在管理你的团队的时候发现很多问题，而解决这个问题，那在项目编码前，就把什么东西都规定好，以免其中发生问题，影响整个团队的开发速度。开发工具的选择也是非常重要的，目前企业用得比较多的开发工具有：Eclipse、Jbuilder、NetBeans、IDEA。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Jbuilder</strong>：最新的Jbuilder版本是2007，2007版基本上可以算是重新开发的版本，因为它是基于Eclipse之上的。我算是Borland公司最为忠实的Fans啦，从Jbuilder6，到Jbuilder7，再到Jbuilder8，再到Jbuilder9、Jbuilder X，Jbuilder 2005，Jbuilder 2006，我经常跟我学生说，对于Jbuilder，相信没有人比我更熟悉他了，做<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">Java</a>开发接近6年时间，超过4年的时间，每天都都在使用的工具，Jbuilder见证了我的长成。使用过Jbuilder的人很多人知道一点，就是Jbuilder的盗版问题，安装完Jbuilder之后，假如你一个不小心，没有安装防火墙，那Jbuilder会不时通过8888端口向Borland总部发送一些你的计算机信息，这个是一种非常可怕的“木马”，什么是“木马”？这个就是！这种情况自从Jbuilder X以后就一直有。假如你不怕Borland公司的人跟工商局过来查你公司的软件的话，那选择Jbuilder是一个不错的选择。作为<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">Java</a> IDE开发平台的老大，Jbuilder在企业应用开发是非常有优势的，特别是开发EJB跟WebService，偶只能用一个句来形容，那就是牛。Jbuilder 2007，王者归来，相信对于很多Borland的Fans，还是非常喜欢并乐意去尝试的，不过，价格还是会让很多公司都受不了、速度会让很多程序员也受不了。我的Jbuilder的缘分到2006就基本上已经结束了。现在我的开发环境基本上都是Eclipse。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Eclipse</strong>：IBM捐出来的好东西，发展挺快的，现在已经到了Eclipse3.3，非常好用的一个工具。但Eclipse只是一个基础平台，假如你需要其他的功能，那你需要下载相关的插件进行扩展，下载的插件要注意一下跟Eclipse平台的兼容性问题。<strong>Eclipse+MyEclipse</strong>（<a href="http://www.myeclipseide.com" target="_blank" rel="external">http://www.myeclipseide.com</a> ）是个是很多WEB开发人员都是在采用的一个整合工具，但MyEclipse要钱，如果公司愿意为此支付29.9美元的话，那它是一个非常好的选择；比MyEclipse更上一个档次的还有<strong>Exadel</strong>（<a href="http://www.exadel.com/web/portal/home" target="_blank" rel="external">http://www.exadel.com/web/portal/home</a> ），不过，价格贵得离谱，因为它本身就是一家咨询服务公司做出来，主要还是靠咨询服务，培训挣钱，并且，运行时的不稳定，也让我放弃了选择这个插件作为我的开发工具，虽然这个工具真的是很强大。<strong>Eclipse+WTP</strong>（<a href="http://www.eclipse.org" target="_blank" rel="external">http://www.eclipse.org</a> ）也是一个非常好的免费的开发工具，从eclipse官方网站上可以下载WTP跟Eclipse整合在一起的工具，现在教学基本上用这个。<strong>Lomboz</strong>（<a href="http://lomboz.obj&#101;ctweb.org/" target="_blank" rel="external">http://lomboz.obj&#101;ctweb.org/</a> ）也是一个非常好用的免费<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">J2EE</a>插件，学生用的很多，因为好像有不少书都是用这个进行教学的。通过插件来的扩展本来是一件好事，但当它的版本问题？兼容性问题？安全性问题？语言问题？出现的时候，你就会骂着，为什么不提供一站式开发平台呢？如果你下载了语言包，你会发现，有些地方是中文的，有些地方是英文的，极其丑陋！也许，Eclipse作为一个基础平台，它确实是太基础了。但现在，我们也可以下载一些All-In-One版本的Eclipse，但个人感觉还是不够，很多功能，我们还需要去找插件来进行扩展。也许，Eclipse的决策者认为，作为基础平台，肯定是越简单越好，需要什么就加什么，这样，资源占用会更少。正如东方标准最咨深的平面老师曾宇飞讲过一句话：你会去麦当劳点酸菜鱼吃吗？<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>NetBeans</strong>：作为Sun公司出品的开发工具，功能一样也是非常强大，不管你是做应用程序开发还是做应用系统开发，NetBeans都是一个不错的选择。NetBeans也跟Eclispe一样，也是一个基础平台，但这个基础平台做得比Eclipse强大很多，基本上你下载一个NetBeans就可以开发应用程序或<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">J2EE</a>应用系统了。并且，NetBeans的中文支持非常好，基本上一个新版本出来，就已经有中文版、英文版跟日语版了。看来，NetBeans的决策者还是比较看好这些人群的。NetBeans的Mobile插件开发J2ME是最快最好用的，至少我个人这么认为。开发J2ME应用产品，我首选的就是NetBeans。目前NetBeans已经发展到6.0的版本了，界面非常华丽，有兴趣的朋友可以下载一个玩一下。NetBeans的下载地址是：<a href="http://www.netbeans.org" target="_blank" rel="external">http://www.netbeans.org</a> 。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>IDEA</strong>：对于IDEA的评价，我只能用六个字来形容，那就是：实用的艺术品。它非常好用，界面非常华丽，相当如果你是一个女性的项目经理或技术牛人，你会喜欢上这件艺术器的。IDEA开发应用程序非常强大，这一点绝对可以肯定。官方提供的插件也非常丰富，当你需要那一方面的功能，基本上都可以找得到，找插件，你只需要在官方插件库里面去找就可以了，并且自动安装，自动更新。作为2003年拿到<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">Java</a>World大将的一个作品，相信，它可以带来很多IDEA的创新。它是属于商业化的工具，价格也只有499美元，而个人买也就249美元，如果你愿意牺牲某些功能，那你完全可以下载一个免费的版本。价格方面，个人觉得完全对得起这件艺术品价值。有兴趣的话可以下载一个试用版玩一下：<a href="http://www.jetbrains.com/idea" target="_blank" rel="external">http://www.jetbrains.com/idea</a> ，小声地说，上一下baidu，插件一下，其实你可以找到很多注册号。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Ant</strong>是apache的一个开源项目，可以从Ant官方网站上下载一个最新的版本：<a href="http://ant.apache.com" target="_blank" rel="external">http://ant.apache.com</a> 。虽然该项目虽然现在发展变得非常缓慢，但可以非常肯定地讲，它是一个好东西。我们可以使用ant来对我们整个工程进行编译，打包，单元测试，部署等等，基本上你想得到的东西，Ant可以帮你做得到。Maven（<a href="http://maven.apache.com" target="_blank" rel="external">http://maven.apache.com</a> ）是一人比Ant还要强大的工具，现在大有Maven将会代替Ant的趋势，Maven也是项目经理要关注的一个技术点。基本上现在主流的开发工具都提供共了对Ant的支持，有些甚至是依赖，比如：NetBeans，你在NetBeans当中创建一个新的工程，那系统会自动地创建一个ant的运行脚本程序。对于你进行编译、打包、发布，那完全都是依赖于这个ant脚本。我们可以使用Ant来开发一个DailyBuild（微软叫每日产品生成，XP叫持久集成）的流程，来提高我们整个团队的软件开发质量。Ant的使用非常简单，多看手册，多花点心思，那你会做得更好。<br/><br/><span style="font-size:12pt;line-height:100%;"><span style="color:Red"><strong>三、开发阶段</strong></span></span><br/><strong>第一、配置管理工具</strong><br/><br/>代码管理工具有很多，现在公司用得比较多的代码管理工具有<strong>CVS</strong>、<strong>VSS</strong>、<strong>SVN</strong>。<br/>对于一个开发团队只有2-5个人，并且这两三个人是同一间办公室里，那使用VSS是一个非常不错的选择，个人觉得他小团队的管理方面非常好用。个人觉得VSS唯一的缺点就是一个文件当被一个人锁定，那其他人就没有办法进行修改了，当一个文件为多个人所共用且开发团队人数较多时，这种问题将会显示非常严重。VSS客户端跟服务器你都可以从Visio Studio里面找到。<br/><br/>Eclipse的VSS客户端插件：<a href="http://vssplugin.sourceforge.net/" target="_blank" rel="external">http://vssplugin.sourceforge.net/</a><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;对于一个开发团队有超过5个人，那此如选择CVS或SVN将是一个更好的选择，并且，假如你的团队是分散的，可能不在一间办公室或者根本不在同一个城市，那使用CVS或SVN是一个非常更想的选择。CVS的服务器一般是使用CVSNT或CVSServer。<br/><br/><strong>CVSServer</strong>：<br/><strong>Linux for X86</strong>：<a href="http://ftp.gnu.org/non-gnu/cvs/binary/stable/x86-linux/RPMS/i386/" target="_blank" rel="external">http://ftp.gnu.org/non-gnu/cvs/binary/stable/x86-linux/RPMS/i386/</a><br/><strong>Window for X86</strong>：<a href="http://ftp.gnu.org/non-gnu/cvs/binary/stable/x86-woe/" target="_blank" rel="external">http://ftp.gnu.org/non-gnu/cvs/binary/stable/x86-woe/</a><br/><strong>CVSNT</strong>：<a href="http://www.cvsnt.org/" target="_blank" rel="external">http://www.cvsnt.org/</a><br/><strong>CVSClient</strong>：<br/>&#160;&#160;&#160;&#160;<strong>WinCVS</strong>：<a href="http://www.wincvs.org" target="_blank" rel="external">http://www.wincvs.org</a><br/>&#160;&#160;&#160;&#160;<strong>TortoiseCVS</strong>：<a href="http://www.tortoisecvs.org/" target="_blank" rel="external">http://www.tortoisecvs.org/</a><br/>&#160;&#160;&#160;&#160;<strong>JBuilder</strong>、<strong>Eclipse</strong>、<strong>NetBeans</strong>、<strong>IDEA</strong>集成的CVS客户端<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;作为版本管理工具，CVS出现至今，已经有二十个年头，可以说他已经走到了尽头，但可以肯定，它将继续存在着。SVN是作为CVS的代替产品而出现的。现在很多开源组织，都慢慢地转到SVN上，比如Apache跟SourceForge。SVN有着比CVS更强大的功能，比如，它可记录目录的更改，它的性能比CVS会快很多等等。目前SVN慢慢地被企业所接受，但个人觉得其Eclipse的客户端的稳定性还有待提高，也许这个跟Eclipse的版本兼容性有一定关系。但这些不稳定性，让我现在对这个产品的使用还继续停留在试用的阶段。<br/><br/><strong>SVNServer</strong>：<a href="http://subversion.tigris.org/" target="_blank" rel="external">http://subversion.tigris.org/</a><br/><strong>SVNClient</strong>：<br/>&#160;&#160;&#160;&#160;<strong>TortoiseSVN </strong>：<a href="http://tortoisesvn.net/" target="_blank" rel="external">http://tortoisesvn.net/</a><br/>&#160;&#160;&#160;&#160;<strong>Eclipse</strong>插件：<a href="http://subclipse.tigris.org/" target="_blank" rel="external">http://subclipse.tigris.org/</a><br/>目前SVN插件支持包括Eclipse、Jdeveloper、NetBeans等开发工具。<br/><br/><strong>第二、知识库管理工具</strong><br/>团队每一个人在开发的时候都会发现一些问题，最终，有些问题可能没有办法解决，有些问题可以解决。一般情况，大部分问题经过团队成员的共同努力，都是可以解决的，那解决问题的方法，解决问题的步骤，这些都应该形成知识。作为一个团队的Leader，我们必须重视这些知识，因为，这些知识非常有用，它对于一些新手或没有遇到此类问题的同事，能够提供相应的帮助。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Confluence</strong>（<a href="http://www.atlassian.com" target="_blank" rel="external">http://www.atlassian.com</a>/software/confluence ），跟JIRA来自同一家公司的产品，它跟JIRA可以整合得非常好。我们可以通过JIRA的ISSUE，将该ISSUE上升为一个知识。假如你是使用JIRA来进行项目管理跟缺陷管理，那使用Confluence是一个最佳选择。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>PHPBB</strong>（<a href="http://www.phpbb.com" target="_blank" rel="external">http://www.phpbb.com</a> ），论坛其实也是一个非常好的知识库管理工具，当某一个工程师遇到一些疑难杂症的时候，最终，通过自己的努力或团队其他同事的努力，终于解决问题了。那作为Leader的你，应该鼓励他们将这些知识，写一些文章，然后发布在公司自己的BBS上。供大家参考及讨论。这个是一种很好的方法。记得我以前，我在网上看到一些有用的信息，我就把它保存在我本机的PHPBB上。只可怜，后来电脑被人偷了。贼郁闷。<br/><br/><span style="font-size:12pt;line-height:100%;"><span style="color:Red"><strong>四、软件测试阶段</strong></span></span> <br/><strong>第一、缺陷管理工具</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;软件你不能保证它永远不会错，只是，有些错误你暂时还没有发现而已；有些错误需要在某些特定的环境下它才会发生。就像Windows，时不时会有一些系统更新文件要求更新。可能这些更新不是错误，只是一些系统安全方面的隐患。这些都可以算是软件系统的缺陷。那这些缺陷我们应该怎么进行管理？怎么进行跟踪呢？现在缺陷管理用得比较多的有两个：第一个是开源的bugzilla，另一个是商业的JIRA。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Bugzilla</strong>（<a href="http://www.bugzilla.org" target="_blank" rel="external">http://www.bugzilla.org</a> ），作为开源界缺陷管理系统的鼻祖，它发展到现在已从98年到现在经有10的时间了。它的开发语言是Perl，这使得它的安装变得很麻烦，Bugzilla可以安装在Windows、Linux、Unix等操作系统上。现在的Eclipse也提供了对它的支持，我们可以在Eclispe平台上，找到应用系统的BUG，功能做得非常强大。如果安装能更加轻松一点，或者提供一个All-In-One版本，那会更好！<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>JIRA</strong>，作为商为上化的缺陷管理系统，JIRA的价格对得起它的功能。JIRA不只是一个缺陷管理系统，它更是一个集项目管理、缺陷管理、统计分析为一身的工具。这个工具我一直在使用，只是使用一些“特别”版本而已。<br/><br/><strong>第二、软件性能监测工具</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Jprofiler</strong>（<a href="http://www.ej-technologies.com" target="_blank" rel="external">http://www.ej-technologies.com</a> ）是一个非常好的性能监测工具，使用这个工具，你可以快速发现系统那些模块出现性能瓶颈或算法导致的性能问题；它还可以分析内存泄漏的问题。这个工具也提供了相应的Eclipse插件，让你开发更加快速方便。它支持主流的服务器。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Borland Optimizeit Suite</strong>（<a href="http://www.borland.com" target="_blank" rel="external">http://www.borland.com</a> ）也是一个非常好的性能监测工具，它跟Borland产品整合得非常好。不过，运行这个工具，你最好准备一下，最好有2G内存，否则，本来系统好好的，一运行起来，你机器反而死掉了。<br/><br/><strong>第三、软件性能测试工具</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Ant+Windows计划任务</strong>创建公司的DailyBuild自动化测试流程，这个是以前做的一个测试流程。使用这种测试流程，无非一个目的，就是提高公司的软件质量。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>Jmeter</strong>（<a href="http://jakarta.apache.org/jmeter" target="_blank" rel="external">http://jakarta.apache.org/jmeter</a> ），这个工具是apache出品的，作为apache忠实的Fans，我对Jmeter也是很喜欢，使用Jmeter，你可以摸似多用户环境，对应用系统进行测试，测试整个应用系统能够承受的最大并发量。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>LoadRunner</strong>（<a href="http://www.hp.com" target="_blank" rel="external">http://www.hp.com</a> ），假如你不知道这个软件，那你肯定做不了测试工程师，这个是最专业的一个软件性能测试工具，它可以模似上千万个用户量来进行压力测试，检测系统能够承受的最大并发量。这个软件我只用过几次，编写脚本，进行测试，使用来讲其实算是比较简单。<br/><br/><span style="font-size:12pt;line-height:100%;"><span style="color:Red"><strong>五、软件发布</strong></span></span><br/>&nbsp;&nbsp;&nbsp;&nbsp;软件的发布我们会怎么去做呢？我们一般做法就是，将数据库脚本化，包括建表语句、初始化数据等，还有制作WAR文件或EAR文件。然后到客户那边，我们需要将数据库表及数据进行初始化，接着，将WAR或EAR文件发布到应用服务器上。这个也许是我们到客户现在发布经常在做的一件事情。那能不能做得更加简单呢？做法一般有两个，第一个就是使用Ant，编写一个初始化数据库跟发布应用程序模块的Ant脚本，然后到生产机上直接运行该脚本即可；第二个就是制作安装文件，一般用来制作安装文件的有IzPack，这个是用得最多的一个免费工具，你可以使用这个免费工具来制作安装程序。也许客户都习惯了安装程序的安装方式了，制作一个可执的安装程序，有助于提高软件产品化的档次。<br/><br/><span style="font-size:12pt;line-height:100%;"><span style="color:Red"><strong>六、软件维护阶段</strong></span></span><br/><strong>第一、客户CASE跟踪管理工具</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;客户CASE跟踪系统相信很多做CISCO公司金牌代理的人都会用过。我们必须在公司内部建立相应的CASE跟踪制度。当用户使用系统的时候，发现一些问题，那我们需要对这些问题进行录入并进行跟踪。像客户呼叫服务系统等等一些商业化的软件外面还是很多的，这些系统其实公司自己开发一个也是很快的。但必须要有。这个也是提高整个公司整体服务形象的一种态度。<br/><br/><br/>暂时先写这些，以后再慢慢修改补充！<br/>版权所有，欢迎转载，转载请标明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a>]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=46</link>
			<title><![CDATA[基于PowerDesigner Repository建立模型库]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[系统分析及设计]]></category>
			<pubDate>Sat,12 Jan 2008 15:25:28 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=46</guid>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;PowerDesinger是Sysbase公司最好的产品，至少个人这么认为，呵呵，惭愧！！！ <img src="www.suneca.com/images/smilies/Face_08.gif" border="0" style="margin:0px 0px -2px 0px" alt=""/>开发这么久，还没有用过Sysbase的数据库，以往开发的系统当中，不是基于<a href="http://www.suneca.com/default.asp?cateID=8" target="_blank">Oracle</a>就是Mysql或MSSQLServer，也许Sysbase在中国企业应用还是比较少，当然在某一些领域，比如银行、电信的生产系统等都在使用Sysbase，但至少我还没有接触过这些相关的系统。PowerDesinger是很多设计人员都在使用的一个工具，跟这个工具同一个功能的还有很多，比如Rose、Together、IBM最新的RSA、ERWin等等，但比较过后，还是觉得PowerDesinger更加人性化一些，至少，所见即所得这种方式，深得我个人喜欢，也许，已经习惯了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;公司的管理代码及某些知识库，我们是采用CVS或VSS或SVN来进行管理和维护版本信息，但对于设计模型这一块，我们的做法就是每一个版本我们是以文件名的方式来标识，比如：manbuchina-V1.pdm，manbuchina-V1.1.pdm，manbuchina-V2.pdm等等，然后将该文件保存在公司的CVS服务器上，这种方法相信很多公司都是这么用的；当然有些公司可能根本就没有对设计这一块进行版本管理，这种方式相信在很多刚刚起步，还没有太多技术积累的公司，很多有这种情况，当然，这种情况是非常致命的，当开发到V2版本的时候，V1的模型已经被覆盖掉了，根本找不到，一量客户提出修改意见且需要对模型进行修改的时候，根本无法跟踪。<br/>&nbsp;&nbsp;&nbsp;&nbsp;在默认情况下，CVS会认为一个pdm文件是一个二进制文件，而二进制文件对于CVS来讲，新版本将会把旧版本给替换掉。其实PowerDesigner物理数据库模型文件，本身是一个xml文件，你可以生成一个pdm文件，然后用editplus或UltraEdit打开，你就会知道这一点。那如果是xml文件，那我们当然可以使用cvs或其他版本管理工具来进行版本控制，但要进行配置，告诉CVS服务器这个文件是一个文本文件，要以文本文件的方式来进行版本管理，这个是一种方法。对PowerDesigner有了深入的了解后，发现，PowerDesinger还有更高明更好的办法，那就是基于是PowerDesinger Repository来进立相应的模型库。<br/>&nbsp;&nbsp;&nbsp;&nbsp;PowerDesinger Repository支持多种数据库，你可以将模型库存放在<a href="http://www.suneca.com/default.asp?cateID=8" target="_blank">Oracle</a>、Sysbase、Mysql、MSSQLServer上面。本次采用的保存模型库的数据库是<a href="http://www.suneca.com/default.asp?cateID=8" target="_blank">Oracle</a> 10g。<br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>第一步，我们需要为模型库建立相应的表空间及用户。</strong><br/>建立用户或表空间我们可以使用<a href="http://www.suneca.com/default.asp?cateID=8" target="_blank">Oracle</a> 10g提供的DBConsole、命令行、或其他可视客户端进行创建，为了更清晰地了解创建的过程，我们使用命令行来进行表空间及用户的创建，注意，必须有DBA身份的用户才能使用以下语句。<br/><strong>创建表空间：</strong><br/><strong>Cr&#101;ate SMALLFILE TABLESPACE &#34;POWERDESINGERREPOSITORY&#34; DATAFILE &#39;d:/PowerDesigner.odb&#39; SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO</strong><br/>上面的SQL创建了一个名为POWERDESINGERREPOSITORY的表空间，数据库文件是存放于D盘的PowerDesigner.odb上面，表空间的初始化大小为100M，当表空间满的时候，表空间将会自增长10M，最大空间没有限制。<br/><strong>创建用户：</strong><br/><strong>Cr&#101;ate USER &#34;POWERDESIGNER&#34; PROFILE &#34;DEFAULT&#34; IDENTIFIED BY &#34;admin&#34; DEFAULT TABLESPACE &#34;POWERDESINGERREPOSITORY&#34; TEMPORARY TABLESPACE &#34;TEMP&#34; ACCOUNT UNLOCK;<br/>GRANT &#34;DBA&#34; TO &#34;POWERDESIGNER&#34;;</strong><br/>上面SQL创建了一个叫POWERDESIGNER的用户，密码为admin，默认的表空间是POWERDESINGERREPOSITORY，临时表空间是TEMP。并且将DBA的角色指派给POWERDESIGNER用户。注意，直接将DBA指派给POWERDESIGNER不太合理，这里只是为了方便，一般只需要将connect及resource角色指派给用户即可；另外，数据库用户名没有大小写之分。<br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>第二步，创建ODBC数据源</strong><br/>进行控制面板--&gt;管理工具--&gt;数据源（ODBC）<br/>在用户DSN或系统DSN下面，添加一个数据源，数据源名称取名为powerdesinger或其他你喜欢的名字，配置信息如下图所示，配置完Test Connection一下，以便确认是否配置成功。其中，WALK为服务器在本地的命名。<br/><img src="www.suneca.com/attachments/month_0801/22008112152954.png" border="0" alt=""/><br/><strong>第三步，打开PowerDesigner，定义Repository库，本人用的PowerDesinger是PowerDesinger 12.1。</strong><br/>点击Repository--&gt; Repository Definitions，如下图所示：<br/><img src="www.suneca.com/attachments/month_0801/w2008112153146.png" border="0" alt=""/><br/>将弹出Repository的定义界面，添加一个新的Repository，取名为ManbuChinaRepository<br/><img src="www.suneca.com/attachments/month_0801/t2008112153414.png" border="0" alt=""/><br/>点击属性，对其进行配置，如下图所示<br/><img src="www.suneca.com/attachments/month_0801/t2008112153432.png" border="0" alt=""/><br/>点击Test，测试一下配置是否正确，并点击OK按钮完成Repository的配置。<br/>点击Repository--&gt;Connect，连接数据库，如下图所示：<br/><img src="www.suneca.com/attachments/month_0801/z200811215368.png" border="0" alt=""/><br/>将弹出如下对话框，如下图所示：<br/><img src="www.suneca.com/attachments/month_0801/s2008112153817.png" border="0" alt=""/><br/>点击OK，在弹出的对话框当中输入数据库用户的密码，如下图所示：<br/><img src="www.suneca.com/attachments/month_0801/b2008112153831.png" border="0" alt=""/><br/>接着点击OK按钮。<br/>由于第一次，PowerDesinger并未初始化表空间及初始化数据，所以将会弹出一个出错对话框，如下图所示：<br/><img src="www.suneca.com/attachments/month_0801/h2008112153853.png" border="0" alt=""/><br/>点击确定，将会弹出一个是否初始化的确认对话框，如下图所示：<br/><img src="www.suneca.com/attachments/month_0801/62008112154028.png" border="0" alt=""/><br/>点击是(Y)，PowerDesinger将会进行初始化，初始化是一个已经定义好的脚本，只要点击Execute即可，如下图所示：<br/><img src="www.suneca.com/attachments/month_0801/u2008112154049.png" border="0" alt=""/><br/>初始化完的Repository菜单：<br/><img src="www.suneca.com/attachments/month_0801/n2008112154218.png" border="0" alt=""/><br/><strong>第四步，创建用户</strong><br/>点击Repository--&gt;users，将弹出用户的管理界面，如下图所示：<br/><img src="www.suneca.com/attachments/month_0801/62008112154245.png" border="0" alt=""/><br/>创建一个新用户<br/><img src="www.suneca.com/attachments/month_0801/u200811215439.png" border="0" alt=""/><br/>修改用户信息，如下图所示：<br/><img src="www.suneca.com/attachments/month_0801/b2008112154327.png" border="0" alt=""/><br/>修改用户权限：<br/><img src="www.suneca.com/attachments/month_0801/v2008112154344.png" border="0" alt=""/><br/>将zizz拉到administrator组当中，如下图所示：<br/><img src="www.suneca.com/attachments/month_0801/j200811215444.png" border="0" alt=""/><br/>最后，点击OK按钮，完成了用户的创建。<br/><strong>第五，将设计的数据库物理模型保存保存到服务器上。</strong><br/>首先检查一下当前的登录用户，点击Repository--&gt;Connection Information，将弹出当前用户的登录信息，如下图所示：<br/><img src="www.suneca.com/attachments/month_0801/7200811215454.png" border="0" alt=""/><br/>将物理数据模型添加到PowerDesigner Repository当中，在模型当中点击右键，选择Consolidate…，如下图所示：<br/><img src="www.suneca.com/attachments/month_0801/j2008112154523.png" border="0" alt=""/><br/>将弹出如下对话框，如下图所示：<br/><img src="www.suneca.com/attachments/month_0801/42008112154544.png" border="0" alt=""/><br/>最后，点击确定按钮，完成了将Hibernate RelationShip模型库上传到模型库当中。<br/><strong>第六，查看模型库</strong><br/><img src="www.suneca.com/attachments/month_0801/32008112154610.png" border="0" alt=""/><br/>对于一般用户，比如开发人员，我们可以为其创建一个只读用户，他可以从模型库当中拿下最新的数据库模型。<br/>]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=26</link>
			<title><![CDATA[团队管理]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[系统分析及设计]]></category>
			<pubDate>Sat,01 Dec 2007 19:54:53 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=26</guid>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如何管理一个团队，是项目经理、部门经理所需要去思考的问题。<br/>&nbsp;&nbsp;&nbsp;&nbsp;一个团队，人员变动如果太频繁，这对于团队的建设及软件质量、项目能否按时交付是非常致命的；人员的变动，带来了项目的不断交接，新手不可能百分之百的将项目完全接手下来，而且，文档的质量也是需要去考虑的问题，概要设计文档、详细设计文档能否百分之百地表达了系统功能、算法、系统架构等。<br/>&nbsp;&nbsp;&nbsp;&nbsp;如何组建团队及稳住团队，我个人提出了一个三高政策：即高效率、高水准、高收入！<br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>高效率</strong>：软件开发的工作效率是非常重要的，我将高效率摆在了第一位，因为我觉得工作效率对于项目管理、开发人员开发水平来讲是非常重要的！团队的平均工作效率，对于项目能否按时交付，起来非常关键的作用！我做开发已经做了接近四年，在不断地总结当中，我总结出以下经验：<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;由上述公式得到：人员平无均效率越高，则项目开发时间越少。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<img src="www.suneca.com/attachments/month_0712/l2007121195427.gif" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>高水准</strong>：高水准休现在两方面，第一方是人员的技术水平方面，第二方面是软件项目开发所使用的工具。人员的技术水平可以通过多种方面得到提高，可以通过招聘招来技术水平高一点的人，带动团队人员技术的提升，通过对团队的技术培训与技术交流，增加团队的总休水平。开发工具可以使用目前主流的开发平台、开发框架来支撑项目的开发，并结合针对项目框架，使用的代码生成器来进行辅助系统开发。优秀的的开发工具可以简化程序员的开发效率、优化的开发框架可以简化代码、提高软件质量、提高软件的可读性及可维护性；而使用代码生成器，可以省去程序员经常要做的重复性工作，并且代码能按编码规范及文件命令规范进行生成。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>高收入</strong>：每一个打工者，工作无非就是为了让自己的价值得到休现，而体现其自身价值无非两方面，一方面是自己的劳动成果否能得到肯定、自己在团队当中能否有存在的意义、是否为团队不可缺的一部分；另一方面，即自己的劳动所得，自己的付出能否与回报成一定的比例！第一方面可以通过每个月的绩效考核、每个季度团队内部的评优、每年度的公司级别的评优来进行鼓励。第二方面是团队领导者能真正根据员工的真实水平、在团队所处的位置，给一份让员工满意并且觉得合理的薪水！]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=24</link>
			<title><![CDATA[基于DailyBuild流程提升软件产品的质量]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[系统分析及设计]]></category>
			<pubDate>Sat,01 Dec 2007 19:22:08 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=24</guid>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;微软有DailyBuild的流程，XP有持久集成，他们的观点其他有很多相似之外，就是每日产品生成，即每日都要生成一个新的产品，这种方法的很处多得不得了！今天突然间有一个想法，那就是基于Ant + Windows计划任务设计每日构件功能。<br/>1，每天下午五点钟，所有程序员提交今天工作的代码；<br/>2，每天下午五点十五分，DailyBuild测试服务器的Windows计划任务启动；<br/>3，使用Ant的CVS功能，从CVS服务器上更新最新的代码；<br/>4，编译整个工程；<br/>5，使用Ant的数据库功能，自动创建测试数据库，初始化测试数据；<br/>6，使用Junit，对程序进行单元测试，并生成单元测试报表；<br/>7，翻译并编译jsp文件，检查jsp的语法错误；<br/>8，应用程序打包；<br/>9，Undeploy之前发布的应用程序；<br/>10，发布新的应用程序；<br/>11，基于HttpUnit进行Web自动化测试，生成测试报告；<br/>12，打个所有报告及结果；<br/>13，使用Ant的邮件功能将报告发送到项目经理邮箱；<br/>14，项目经理检查报告，如果有错误，通知相关人员进行整改；整改完才能下班；<br/>15，下班。]]></description>
		</item>
		
</channel>
</rss>
