﻿<?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-romkk-shi-随笔分类-Java技术</title><link>http://www.blogjava.net/romkk-shi/category/24583.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 14 Aug 2007 08:02:53 GMT</lastBuildDate><pubDate>Tue, 14 Aug 2007 08:02:53 GMT</pubDate><ttl>60</ttl><item><title>如何编写代码才能使得效率高 </title><link>http://www.blogjava.net/romkk-shi/archive/2007/08/14/136582.html</link><dc:creator>路边的石头-java</dc:creator><author>路边的石头-java</author><pubDate>Tue, 14 Aug 2007 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/romkk-shi/archive/2007/08/14/136582.html</guid><wfw:comment>http://www.blogjava.net/romkk-shi/comments/136582.html</wfw:comment><comments>http://www.blogjava.net/romkk-shi/archive/2007/08/14/136582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/romkk-shi/comments/commentRss/136582.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/romkk-shi/services/trackbacks/136582.html</trackback:ping><description><![CDATA[<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-08-02: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "454545";
google_color_text = "454545";
google_color_url = "454545";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><p>一、排版： <br>　　1.关键词和操作符之间加适当的空格。 <br>　　2.相对独立的程序块与块之间加空行 <br>　　3.较长的语句、表达式等要分成多行书写。 <br>　　4.划分出的新行要进行适应的缩进，使排版整齐，语句可读。 <br>　　5.长表达式要在低优先级操作符处划分新行，操作符放在新行之首。 <br>　　6.循环、判断等语句中若有较长的表达式或语句，则要进行适应的划分。 <br>　　7.若函数或过程中的参数较长，则要进行适当的划分。 <br>　　8.不允许把多个短语句写在一行中，即一行只写一条语句。 <br>　　9.函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格。 <br>　　10.C/C++语言是用大括号&#8216;{&#8217;和&#8216;}&#8217;界定一段程序块的，编写程序块时&#8216;{&#8217;和 <br>　　　&#8216;}&#8217;应各独占一行并且位于同一列，同时与引用它们的语句左对齐。在函数体 <br>　　　　的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、 <br>　　　　switch、case语句中的程序都要采用如上的缩进方式。 </p>
<p>二、注释 <br>　　1.注释要简单明了。 <br>　　2.边写代码边注释，修改代码同时修改相应的注释，以保证注释与代码的一致性。 <br>　　3.在必要的地方注释，注释量要适中。注释的内容要清楚、明了，含义准确，防止 <br>　　　注释二义性。保持注释与其描述的代码相邻，即注释的就近原则。 <br>　　4.对代码的注释应放在其上方相邻位置，不可放在下面。 <br>　　5.对数据结构的注释应放在其上方相邻位置，不可放在下面；对结构中的每个域 <br>　　　的注释应放在此域的右方；同一结构中不同域的注释要对齐。 <br>　　6.变量、常量的注释应放在其上方相邻位置或右方。 <br>　　7.全局变量要有较详细的注释，包括对其功能、取值范围、哪些函数或过程存取它 <br>　　　以及存取时注意事项等的说明。 <br>　　8.在每个源文件的头部要有必要的注释信息，包括：文件名；版本号；作者；生成 <br>　　　日期；模块功能描述（如功能、主要算法、内部各部分之间的关系、该文件与其 <br>　　　它文件关系等）；主要函数或过程清单及本文件历史修改记录等。 <br>　　9.在每个函数或过程的前面要有必要的注释信息，包括：函数或过程名称；功能描 <br>　　　述；输入、输出及返回值说明；调用关系及被调用关系说明等。 </p>
<p>三、命名 <br>　　1.较短的单词可通过去掉&#8220;元音&#8221;形成缩写； <br>　　2.较长的单词可取单词的头几发符的优先级，并用括号明确表达式的操作顺序，避 <br>　　　免使用默认优先级。 <br>　　3.使用匈牙利表示法 </p>
<p>四、可读性 <br>　　1.避免使用不易理解的数字，用有意义的标识来替代。 <br>　　2.不要使用难懂的技巧性很高的语句。 <br>　　3.源程序中关系较为紧密的代码应尽可能相邻。 </p>
<p>五、变量 <br>　　1.去掉没必要的公共变量。 <br>　　2.构造仅有一个模块或函数可以修改、创建，而其余有关模块或函数只访问的公共 <br>　　　变量，防止多个不同模块或函数都可以修改、创建同一公共变量的现象。 <br>　　3.仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。 <br>　　4.明确公共变量与操作此公共变量的函数或过程的关系，如访问、修改及创建等。 <br>　　5.当向公共变量传递数据时，要十分小心，防止赋与不合理的值或越界等现象发生。 <br>　　6.防止局部变量与公共变量同名。 <br>　　7.仔细设计结构中元素的布局与排列顺序，使结构容易理解、节省占用空间，并减 <br>　　　少引起误用现象。 <br>　　8.结构的设计要尽量考虑向前兼容和以后的版本升级，并为某些未来可能的应用保 <br>　　　留余地（如预留一些空间等）。 <br>　　9.留心具体语言及编译器处理不同数据类型的原则及有关细节。 <br>　　10.严禁使用未经初始化的变量。声明变量的同时对变量进行初始化。 <br>　　11.编程时，要注意数据类型的强制转换。 </p>
<p>六、函数、过程 <br>　　1.函数的规模尽量限制在200行以内。 <br>　　2.一个函数最好仅完成一件功能。 <br>　　3.为简单功能编写函数。 <br>　　4.函数的功能应该是可以预测的，也就是只要输入数据相同就应产生同样的输出。 <br>　　5.尽量不要编写依赖于其他函数内部实现的函数。 <br>　　6.避免设计多参数函数，不使用的参数从接口中去掉。 <br>　　7.用注释详细说明每个参数的作用、取值范围及参数间的关系。 <br>　　8.检查函数所有参数输入的有效性。 <br>　　9.检查函数所有非参数输入的有效性，如数据文件、公共变量等。 <br>　　10.函数名应准确描述函数的功能。 <br>　　11.避免使用无意义或含义不清的动词为函数命名 <br>　　12.函数的返回值要清楚、明了，让使用者不容易忽视错误情况。 <br>　　13/明确函数功能，精确（而不是近似）地实现函数设计。 <br>　　14.减少函数本身或函数间的递归调用。 <br>　　15.编写可重入函数时，若使用全局变量，则应通过关中断、信号量（即P、V操作） <br>　　　　等手段对其加以保护。 </p>
<p>七、可测性 <br>　　1.在编写代码之前，应预先设计好程序调试与测试的方法和手段，并设计好各种调 <br>　　测开关及相应测试代码如打印函数等。 <br>　　2.在进行集成测试/系统联调之前，要构造好测试环境、测试项目及测试用例，同时 <br>　　仔细分析并优化测试用例，以提高测试效率。 </p>
<p>八、程序效率 <br>　　1.编程时要经常注意代码的效率。 <br>　　2.在保证软件系统的正确性、稳定性、可读性及可测性的前提下，提高代码效率。 <br>　　3.不能一味地追求代码效率，而对软件的正确性、稳定性、可读性及可测性造成影 <br>　　　响。 <br>　　4.编程时，要随时留心代码效率；优化代码时，要考虑周全。 <br>　　5.要仔细地构造或直接用汇编编写调用频繁或性能要求极高的函数。 <br>　　6.通过对系统数据结构划分与组织的改进，以及对程序算法的优化来提高空间效率。 <br>　　7.在多重循环中，应将最忙的循环放在最内层。 <br>　　8.尽量减少循环嵌套层次。 <br>　　9.避免循环体内含判断语句，应将循环语句置于判断语句的代码块之中。 <br>　　10.尽量用乘法或其它方法代替除法，特别是浮点运算中的除法。 </p>
<p>九、质量保证 <br>　　1.在软件设计过程中构筑软件质量。 <br>　　代码质量保证优先原则 <br>　　（1）正确性，指程序要实现设计要求的功能。 <br>　　（2）稳定性、安全性，指程序稳定、可靠、安全。 <br>　　（3）可测试性，指程序要具有良好的可测试性。 <br>　　（4）规范/可读性，指程序书写风格、命名规则等要符合规范。 <br>　　（5）全局效率，指软件系统的整体效率。 <br>　　（6）局部效率，指某个模块/子模块/函数的本身效率。 <br>　　（7）个人表达方式/个人方便性，指个人编程习惯。 <br>　　2.只引用属于自己的存贮空间。 <br>　　3.防止引用已经释放的内存空间。 <br>　　4.过程/函数中分配的内存，在过程/函数退出之前要释放。 <br>　　5.过程/函数中申请的（为打开文件而使用的）文件句柄，在过程/函数退出前要关闭。 <br>　　6.防止内存操作越界。 <br>　　7.时刻注意表达式是否会上溢、下溢。 <br>　　8.认真处理程序所能遇到的各种出错情况。 <br>　　9.系统运行之初，要初始化有关变量及运行环境，防止未经初始化的变量被引用。 <br>　　10.系统运行之初，要对加载到系统中的数据进行一致性检查。 <br>　　11.严禁随意更改其它模块或系统的有关设置和配置。 <br>　　12.不能随意改变与其它模块的接口。 <br>　　13.充分了解系统的接口之后，再使用系统提供的功能。 <br>　　14.要时刻注意易混淆的操作符。当编完程序后，应从头至尾检查一遍这些操作符。 <br>　　15.不使用与硬件或操作系统关系很大的语句，而使用建议的标准语句。 <br>　　16.建议：使用第三方提供的软件开发工具包或控件时，要注意以下几点： <br>　　（1）充分了解应用接口、使用环境及使用时注意事项。 <br>　　（2）不能过分相信其正确性。 <br>　　（3）除非必要，不要使用不熟悉的第三方工具包与控件。 </p>
<p>十、代码编译 <br>　　1.编写代码时要注意随时保存，并定期备份，防止由于断电、硬盘损坏等原因造成 <br>　　　代码丢失。 <br>　　2.同一项目组内，最好使用相同的编辑器，并使用相同的设置选项。 <br>　　3.合理地设计软件系统目录，方便开发人员使用。 <br>　　4.打开编译器的所有告警开关对程序进行编译。 <br>　　5.在同一项目组或产品组中，要统一编译开关选项。 <br>　　6.使用工具软件（如Visual SourceSafe）对代码版本进行维护。 </p>
<p>十一、代码测试、维护 <br>　　1.单元测试要求至少达到语句覆盖。 <br>　　2.单元测试开始要跟踪每一条语句，并观察数据流及变量的变化。 <br>　　3.清理、整理或优化后的代码要经过审查及测试。 <br>　　4.代码版本升级要经过严格测试。&nbsp;</p><script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-08-02: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "454545";
google_color_text = "454545";
google_color_url = "454545";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><img src ="http://www.blogjava.net/romkk-shi/aggbug/136582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/romkk-shi/" target="_blank">路边的石头-java</a> 2007-08-14 10:27 <a href="http://www.blogjava.net/romkk-shi/archive/2007/08/14/136582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Axis开发Web Service程序</title><link>http://www.blogjava.net/romkk-shi/archive/2007/08/13/136281.html</link><dc:creator>路边的石头-java</dc:creator><author>路边的石头-java</author><pubDate>Mon, 13 Aug 2007 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/romkk-shi/archive/2007/08/13/136281.html</guid><wfw:comment>http://www.blogjava.net/romkk-shi/comments/136281.html</wfw:comment><comments>http://www.blogjava.net/romkk-shi/archive/2007/08/13/136281.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/romkk-shi/comments/commentRss/136281.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/romkk-shi/services/trackbacks/136281.html</trackback:ping><description><![CDATA[<br><script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-08-02: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "454545";
google_color_text = "454545";
google_color_url = "454545";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>今天是感恩节，差点又要在公司加班了。好在Web Service程序并不是特别难搞，下午终于在eclipse下调通过了，正确产生了服务器端和客户端的Java代码，apache的东西的确很不错。
<p>　　说道Web Service的程序开发八个月前我加班调试公司和中国电信的商务领航系统的接口的时候，用的就是Web Service，Web Service有很多优点，使用Web Service可以在不同编程语言间实现数据交换，而我那时对Web Service也不熟，就由同事帮我生成了一大堆Web Service的框架代码，我则只单独开发业务代码。</p>
<p>　　这次的另外一个项目也要用Web Service了，不过人手也少了，没有人帮做Web Service了，只好自己动手。</p>
<p>　　好在开发前，有个同事先给我们不熟悉Web Service的程序员进行了一些培训，我才知道原来以前的Web Service都是可以自动生成代码的，而且也不难，试了一个下午客户端和服务器端的Web Service代码就都调试通过了，真不错。</p>
<p>　　为了更多喜爱开发的程序员也能迅速了解Web Service的开发，我这里整理了一些通过Axis开发Web Service的一些要点，希望能让不熟悉Web Service的开发人员能够迅速掌握Web Service。</p>
<p>　　<strong>一、Axis环境的安装</strong></p>
<p>　　1、安装环境 J2SE SDK 1.4，Tomcat 5.0，eclipse 3.2。</p>
<p>　　2、到 <a href="http://xml.apache.org/" target=_blank><u><font color=#0000ff>http://xml.apache.org</font></u></a>&nbsp;网站下载Axis安装包。</p>
<p>　　3、将Axis相关包文件放在WEB-INF\lib目录下。</p>
<p>　　4、Axis可选的包：activation.jar； mail.jar； xmlsec-1.4.Beta1.jar拷贝到WEB-INF目录下，生成客户端时候需要使用。</p>
<p>　　Axis支持三种web service的部署和开发，分别为：</p>
<p>　　1、Dynamic Invocation Interface （DII）</p>
<p>　　2、Dynamic Proxy方式</p>
<p>　　3、Stubs方式</p>
<p>　　前两种方式我就不介绍了，同事告诉我他们自己都不使用前两种方式，他们建议我们使用Stubs方式，因此我就主要就介绍一下第三种方式。注意，我自己的Java源代码是放在D：\workspace\test\目录下，Axis相关包文件放在D：\workspace\test\WEB-INF目录下。</p>
<p>　　<strong>二、编写wsdd发布web服务，编写stub client访问web服务</strong></p>
<p>　　1、编写服务端程序server，SayHello.java，编译server.SayHello.java</p>
<p>package server;<br>public class SayHello<br>{<br>&nbsp;&nbsp;&nbsp; public String getName(String name)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "hello "+name;<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<p>　　2、编写wsdd文件</p>
<p>　　deploy.wsdd文件内容如下：</p>
<p>&lt;deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"&gt;<br>&nbsp;&lt;service name="SayHello" provider="java:RPC"&gt;<br>&nbsp; &lt;parameter name="className" value="server.SayHello.getName"/&gt;<br>&nbsp; &lt;parameter name="allowedMethods" value="*"/&gt;<br>&nbsp;&lt;/service&gt;<br>&lt;/deployment&gt;</p>
<p>　　3、发布服务：</p>
<p>　　编辑一个deploy.bat，Axis_Lib为axis.jar路径。内容如下：</p>
<p>set Axis_Lib=D:\workspace\test\WEB-INF\lib<br>set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%<br>set Axis_Servlet=http://localhost:8080/test/servlet/AxisServlet<br>%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd</p>
<p>　　执行这个批处理文件，这时候，如果提示成功的话，访问<a href="http://localhost:8080/test/services"><u><font color=#0000ff>http://localhost</font><font color=#000000>:</font><font color=#0000ff>8080/test/services</font></u></a> 就会显示服务列表。</p>
<p>　　4、生成客户端client stub文件</p>
<p>　　在浏览器上访问服务器端的服务，可以下载到WSDL文件，通过Axis的相关工具，可以自动从WSDL文件中生成Web Service的客户端代码。</p>
<p>　　编写一个WSDL2Java.bat文件，其内容如下：</p>
<p>set Axis_Lib=D:\workspace\test\WEB-INF\lib<br>set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%<br>set Output_Path=D:\workspace\test\src<br>set Package=server.SayHello<br>%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% SayHello.wsdl</p>
<p>　　执行这个批处理文件就可以生成client stub.</p>
<p>　　生成的stub client文件列表为：SayHello.java，SayHelloService.java，SayHelloServiceLocator.java，SayHelloSoapBindingStub.java .</p>
<p>　　5、编写客户端程序，编译并执行</p>
<p>　　下面是一段junit测试客户端代码。</p>
<p>import java.net.URL;<br>import junit.framework.Test;<br>import junit.framework.TestCase;<br>import junit.framework.TestSuite;</p>
<p>public class TestWSClient extends TestCase {</p>
<p>&nbsp;&nbsp;&nbsp; public TestWSClient(String string) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(string);<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void SayHelloClient() throws Exception {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SayHelloService service = new SayHelloServiceLocator();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SayHello_PortType client = service.getSayHello() ;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String retValue = client.getName("clientname");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(retValue);</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public static Test suite() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestSuite suite = new TestSuite();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suite.addTest(new TestWSClient("SayHelloClient"));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return suite;<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<p>　　至此，整个服务器端和客户端的Web Service框架代码就完成了，剩下的就是在里面加入你的业务代码了，怎么样，Web Service并不难开发吧。</p>
<br><script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-08-02: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "454545";
google_color_text = "454545";
google_color_url = "454545";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><img src ="http://www.blogjava.net/romkk-shi/aggbug/136281.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/romkk-shi/" target="_blank">路边的石头-java</a> 2007-08-13 09:42 <a href="http://www.blogjava.net/romkk-shi/archive/2007/08/13/136281.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>