﻿<?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-robbie-随笔分类-软件设计</title><link>http://www.blogjava.net/robbie/category/31872.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 06 Jul 2008 14:13:08 GMT</lastBuildDate><pubDate>Sun, 06 Jul 2008 14:13:08 GMT</pubDate><ttl>60</ttl><item><title>如何编写高质量的Java代码</title><link>http://www.blogjava.net/robbie/archive/2008/06/15/208162.html</link><dc:creator>The Matrix</dc:creator><author>The Matrix</author><pubDate>Sun, 15 Jun 2008 14:05:00 GMT</pubDate><guid>http://www.blogjava.net/robbie/archive/2008/06/15/208162.html</guid><wfw:comment>http://www.blogjava.net/robbie/comments/208162.html</wfw:comment><comments>http://www.blogjava.net/robbie/archive/2008/06/15/208162.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/robbie/comments/commentRss/208162.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/robbie/services/trackbacks/208162.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><span style="font-family: 宋体;">如何编写高质量的</span><span lang="EN-US">Java</span><span style="font-family: 宋体;">代码：</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US"><span>1、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体;">养成良好的习惯及良好的编码风格，比如当有代码没有彻底完成前，通过</span><span lang="EN-US">TODO</span><span style="font-family: 宋体;">、</span><span lang="EN-US">FIXME</span><span style="font-family: 宋体;">等方式进行标注，比如良好的命名规则、注释、行间距等</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><span lang="EN-US"><span>2、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体;">秉承设计模式的一个基本原则：单一职责，一个类不应过于庞大，如果过于庞大，则应分解</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><span lang="EN-US"><span>3、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体;">避免</span><span lang="EN-US">Ctrl+C</span><span style="font-family: 宋体;">、</span><span lang="EN-US">Ctrl+V</span><span style="font-family: 宋体;">，当发生这样的事情后，需要进行重构</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><span lang="EN-US"><span>4、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体;">要敢于重构，敢于重构的一个质量保证手段就是要对代码进行充分的测试</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US"><span>5、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体;">注意异常处理、注意事务控制的范围</span><br />
</p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US"><span>6、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体;">遇到问题不能总是求助于</span><span lang="EN-US">Google</span><span style="font-family: 宋体;">、其他同事，要自己能够分析问题，解决问题</span></p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US"><span>7、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体;">不能仅仅满足于编码速度快，要时刻牢记需要编写的是高质量的代码，易于维护的代码。一定要深刻理解高质量、易于维护。高质量就是说代码需要在各种情况下都能正常工作，而不仅仅是正常流程</span><span lang="EN-US">no problem</span><span style="font-family: 宋体;">，易于维护就是说如果换了一个开发人员来修改代码，是否能够很容易的阅读代码，理解代码，还是他会觉得这段代码无药可救了，重写是最佳选择，如果是后一种状况的话，那么这段代码就是最糟糕的了。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>以下为摘自IBM &lt;Java代码质量专题&gt;的一段话：<br />
</o:p></span></p>
<blockquote>
<p class="MsoNormal"><span style="font-family: 宋体;">高质量的软件通常具备了这样一些特性：</span></p>
</blockquote>
<ul>
    <li><!--[if !supportLists]--><span style="font-family: 宋体;">满足用户的需求。</span></li>
    <li><!--[if !supportLists]--><span style="font-family: 宋体;">合理进度、成本、功能关系。</span></li>
    <li><!--[if !supportLists]--><span style="font-family: 宋体;">具备扩展性和灵活性，能够适应一定程度的需求变化。</span></li>
    <li><!--[if !supportLists]--><span style="font-family: 宋体;">能够足够的强壮、足够的鲁棒，能够有效的处理例外的情况。</span></li>
    <li><!--[if !supportLists]--><!--[if !supportLists]--><span style="font-family: Wingdings;" lang="EN-US">保持成本和性能的平衡。</span></li>
    <li><span style="font-family: Wingdings;" lang="EN-US"><span><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
    </span></span></span><!--[endif]--><span style="font-family: 宋体;">能够可持续的发展。</span></li>
</ul>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.blogjava.net/robbie/aggbug/208162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/robbie/" target="_blank">The Matrix</a> 2008-06-15 22:05 <a href="http://www.blogjava.net/robbie/archive/2008/06/15/208162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>架构设计的思考</title><link>http://www.blogjava.net/robbie/archive/2008/06/01/205140.html</link><dc:creator>The Matrix</dc:creator><author>The Matrix</author><pubDate>Sun, 01 Jun 2008 05:18:00 GMT</pubDate><guid>http://www.blogjava.net/robbie/archive/2008/06/01/205140.html</guid><wfw:comment>http://www.blogjava.net/robbie/comments/205140.html</wfw:comment><comments>http://www.blogjava.net/robbie/archive/2008/06/01/205140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/robbie/comments/commentRss/205140.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/robbie/services/trackbacks/205140.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 首先需要明白的是，什么是架构设计，看了以前的培训资料，也google了，也自己想了，总结下来：<br />
<br />
&nbsp;&nbsp;&nbsp; 架构设计：软件系统是由组件以及它们之间的连接关系组成的，同时架构设计还要满足软件系统的易变性、可扩展性、可维护性等特性。<br />
<br />
&nbsp;&nbsp;&nbsp; 搞清楚了什么是架构设计之后，再想想怎么才能做好架构设计呢？<br />
<br />
&nbsp;&nbsp;&nbsp; 架构设计可大可小，回顾一下自己做过的项目，细想再小的项目其实也有一个架构设计，只不过这个架构设计可能很小，三言两语就能描述清楚了，比如一个很小的BS系统，可能也要划分一下，功能模块如何划分，哪些是公用的，目录或package如何划分，这个我觉得也是架构设计。<br />
<br />
&nbsp;&nbsp;&nbsp; 但是当系统变大时，架构设计就变得复杂了，因为需要考虑的东西就多了，一方面从系统的功能来说，系统功能点已经上百成千个了，光是搞清楚这些功能点就已经不容易了，如何从这些功能点中发掘共性，划分组件，如何设计组件之间的联系，实现分而治之就更复杂了，另一方面，系统变大了，系统的非功能性需求或约束更多了，一个小系统，可能不需要考虑大用户量、并发、大数据量等问题，但一个大系统，即使用户不提这些约束条件，一个好的项目经理或者架构师，必须替用户考虑这些约束条件，有几年的数据以后，系统会不会变慢，采取什么样的方式可以解决这样的问题，用户如果要求5秒内，系统必须有响应，那么目前的架构设计能不能满足这样的要求呢？<br />
<br />
&nbsp;&nbsp;&nbsp; 同时从软件系统的架构与建筑设计的类比来看，一个建筑设计，必定是先把建筑结构定下来，然后再按图施工，如果想有创新性的设计，则必须广闻博见，同时还必须功力深厚，否则怎么设计的出鸟巢呢？呵呵<br />
<br />
&nbsp;&nbsp; 同样对于一个软件架构的设计者来说，第一个层次，丰富的实践知识，达到这样，至少在一定的范围内可以依葫芦画瓢了，同时还可以有一些局部性的创新设计。<br />
&nbsp;&nbsp; 第二个层次建立在第一个层次的基础上，广闻博见，精通十八般武艺，无论哪种兵器都能使得很趁手，比如BS架构很熟悉，CS架构很熟悉，银行系统的架构设计做过，电信系统的架构见过研究过，嵌入式系统的架构也熟悉，操作系统、数据库等基础知识那更是不用说，至少熟悉多种主流编程语言，还能紧跟潮流趋势，更要有自己的思想，理解能力深厚，这样的大师我想应该能做出创新性的设计了。<br />
<br />
&nbsp;&nbsp;&nbsp; 回顾一下自己，只能是第一个层次了，其实第一个层次也不算很好，第二个层次只能算刚刚入门，看来要成为一个大师，很难，@_@<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/robbie/aggbug/205140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/robbie/" target="_blank">The Matrix</a> 2008-06-01 13:18 <a href="http://www.blogjava.net/robbie/archive/2008/06/01/205140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>架构设计</title><link>http://www.blogjava.net/robbie/archive/2008/05/31/205090.html</link><dc:creator>The Matrix</dc:creator><author>The Matrix</author><pubDate>Sat, 31 May 2008 14:54:00 GMT</pubDate><guid>http://www.blogjava.net/robbie/archive/2008/05/31/205090.html</guid><wfw:comment>http://www.blogjava.net/robbie/comments/205090.html</wfw:comment><comments>http://www.blogjava.net/robbie/archive/2008/05/31/205090.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/robbie/comments/commentRss/205090.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/robbie/services/trackbacks/205090.html</trackback:ping><description><![CDATA[今天将以前参加的一个架构设计的培训教材拿出来又翻了翻，忽然发现当时培训的教材其实是按照RUP的开发思路来安排的。<br />
首先来看看RUP的核心工作流，分别是：<br />
<ul>
    <li>商业建模（业务建模）</li>
    <li>需求</li>
    <li>分析与设计</li>
    <li>实现</li>
    <li>测试</li>
    <li>发布</li>
    <li>配置与变更管理</li>
    <li>项目管理</li>
    <li>环境</li>
</ul>
后面几项与架构设计的关系不大，重点看前面几个：商业建模、需求、分析与设计。<br />
回过头来再看看培训教材的大纲：<br />
<ul>
    <li>架构师必备的全局观</li>
    <li>架构设计导论</li>
    <li>架构设计过程概览&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
    </li>
    <li>需求分析&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---- RUP ---- 需求<br />
    </li>
    <li>领域建模&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---- RUP ---- 商业建模<br />
    </li>
    <li>打通软件需求到架构师设计之墙&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---- RUP ---- 需求、分析与设计<br />
    </li>
    <li>概念性架构设计&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---- RUP ---- 分析与设计<br />
    </li>
    <li>细化架构设计&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---- RUP ---- 分析与设计</li>
    <li>非功能需求设计方法论&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---- RUP ---- 分析与设计（重点在非功能需求的架构设计）</li>
    <li>架构验证&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---- RUP ---- 分析与设计（重点在验证）</li>
    <li>UML实践指南</li>
    <li>面向对象架构设计</li>
    <li>架构模式实践</li>
    <li>框架技术实践</li>
</ul>
除了实践部分与前面概要性的部分之外，其余部分基本可以对应起来。<br />
<br />
有时候，会觉得写小说是件容易的事情，设计好大纲，一篇一篇往里填充不就行了么，但是换做真的是自己动笔的话，确万万也写不出来。<br />
架构设计也是如此，简单点说是如此简单：熟悉需求、商业建模、分析与设计。但是真的遇到一个需要实现的系统时，确发现千头万绪，要想做一个好的架构，不是一件容易的事情。<br />
<br />
要想做好架构设计，重点还在一个<strong><u>分析</u></strong>，学习架构设计也是如此，那就是得分析开源框架、别人的代码为什么要这么做？要分析我从中可以体会到什么？<br />
架构设计师的知识面一定要广，否则应用面就比较窄了。<br />
<br />
说了半天，回头一看，乱七八糟，其实最近在琢磨的一个问题是，如何才能搞好架构设计 ^_^<br />
<br />
再想想，这是一个长期工程，需要不断的分析积累。<br />
<br />
<br />
<img src ="http://www.blogjava.net/robbie/aggbug/205090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/robbie/" target="_blank">The Matrix</a> 2008-05-31 22:54 <a href="http://www.blogjava.net/robbie/archive/2008/05/31/205090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>