﻿<?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-常高伟的专栏-随笔分类-深思录</title><link>http://www.blogjava.net/chgaowei/category/42131.html</link><description>思考、分享、交流、进步——为了自己的、公司的、中国的、世界的软件技术</description><language>zh-cn</language><lastBuildDate>Mon, 12 Oct 2009 12:32:52 GMT</lastBuildDate><pubDate>Mon, 12 Oct 2009 12:32:52 GMT</pubDate><ttl>60</ttl><item><title>软件体系结构的重构&amp;mdash;&amp;mdash;定义</title><link>http://www.blogjava.net/chgaowei/archive/2009/10/12/297962.html</link><dc:creator>常高伟</dc:creator><author>常高伟</author><pubDate>Mon, 12 Oct 2009 12:14:00 GMT</pubDate><guid>http://www.blogjava.net/chgaowei/archive/2009/10/12/297962.html</guid><wfw:comment>http://www.blogjava.net/chgaowei/comments/297962.html</wfw:comment><comments>http://www.blogjava.net/chgaowei/archive/2009/10/12/297962.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chgaowei/comments/commentRss/297962.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chgaowei/services/trackbacks/297962.html</trackback:ping><description><![CDATA[<p>以前做过一个产品，共分为三层：平台层，应用服务器层，应用层。其中有一个业务流程，实现是在应用层，但它那里的信息不全，需要通过应用服务器层向平台层获取必要的业务数据，然后通过应用服务器层控制业务流程。当时考虑这个结构的时候，主要的出发点就是业务和控制分离，将业务处理从平台层剥离开来。当时，在具体是实施过程中，我们工程师对这种结构抵触心理很强烈。他认为我们的业务开发非常的繁琐，而且经常要贴“狗皮膏药”。 <p>先抛开上面这个实例的设计思路，这里面反映出一个问题：<strong>软件开发过程中，软件体系结构同样需要“重构”</strong>。 <p>结合经典的《重构》，这里简单的写一下软件体系结构重构的定义，原因，设计，方法。仅作抛砖引玉，希望能和大家一起思考。 <p><strong>何谓重构</strong> <p>对软件体系结构的一种调整，目的是在不改变其“外在行为”的前提下，调整其结构，使其易于修改，维护和理解。 <p><strong>为何重构</strong> <p>1、使整个系统易于添加新的功能。为系统添加新功能将会非常的容易。 <p>2、调整系统中各个模块的功能，角色，使整个系统更容易理解。<br><strong>何时重构</strong> <p>由于系统结构的重构成本非常高，所以要选择一个合适的重构时机。 <p>1、为系统添加功能时重构。此时项目进度压力如果非常大，这放弃此时重构。 <p>2、软件第一个版本开发完毕后重构。在第一个版本开发完毕，第二个版本开发之前，根据第一个版本的开发经验，对系统进行重构。 <p>3、开发出系统原型时进行重构。开发出一个系统的原型的时候，如果发现系统需要重构，这及时的进行，这个时候重构成本较低，但对是否重构决策要求较高。 <p><strong>重构的必要条件</strong> <p>重构之前必须为软件系统建立一个可靠的、自动化的功能测试环境，这样才能有效防止重构带来的危害。好的测试时重构的根本。重构之前，首先检查自己是否有一套可靠的测试机制。这些测试必须有自我检验（selfchecking）能力。 <p><strong>重构与设计</strong> <p>系统架构层次的重构，因为重构的成本相对较高，所以预先设计的程度要相对较深，要尽量考虑系统可能遇到的情况，方案要适当的灵活和强固。尽量减少系统结构的重构。 <p><strong>软件体系结构的重和代码的重构的区别</strong> <p>1、针对的层次不同：一个是系统结构层次的，一个是代码层次的。 <p>2、重构成本不同，系统结构的重构成本相对较高。 <p>3、是否重构的决策者不同。 <p>4、重构的时机不同。</p><img src ="http://www.blogjava.net/chgaowei/aggbug/297962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chgaowei/" target="_blank">常高伟</a> 2009-10-12 20:14 <a href="http://www.blogjava.net/chgaowei/archive/2009/10/12/297962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对待新知识、新领域的心态&amp;mdash;&amp;mdash;好奇、批判、独孤求败</title><link>http://www.blogjava.net/chgaowei/archive/2009/10/12/297959.html</link><dc:creator>常高伟</dc:creator><author>常高伟</author><pubDate>Mon, 12 Oct 2009 12:13:00 GMT</pubDate><guid>http://www.blogjava.net/chgaowei/archive/2009/10/12/297959.html</guid><wfw:comment>http://www.blogjava.net/chgaowei/comments/297959.html</wfw:comment><comments>http://www.blogjava.net/chgaowei/archive/2009/10/12/297959.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chgaowei/comments/commentRss/297959.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chgaowei/services/trackbacks/297959.html</trackback:ping><description><![CDATA[<p>在学习的不同的阶段我们应该保持的心态：<br>1、接触之前，拥有一个好奇的心态。与自己原有的知识对比，不要对新的知识产生偏见。比如，原来一直采用瀑布式软件开发，在接触敏捷软件开发之前，不要对敏捷软件开发模式产生偏见：“敏捷开发根本不能够和瀑布式开发相提并论”。偏见会阻碍新知识的学习，而是要对敏捷开发保持一种好奇心： <p>1）这种理论为什么会提出来？<br>2）主要为了解决什么问题？<br>3）现有的理论无法解决此问题吗？<br>4）它是基于什么样的原理？<br>5）它是如何运行的？ <p>2、学习了一段时间，拥有一定基础之后，要以一种批判的、怀疑的心态来对待学习的知识。当你拥有了对新知识的一定认识后，有可能会发现它很好解决了你以前遇到的一些非常棘手的问题，或者发现你找到了某一领域问题的完美的解决方案。这个时候，你要让自己坚信，“没有银弹”，没有包治百病的灵丹妙药。任何方案、理论、技术都有其依赖的条件，或者在解决原有问题后，引入的新的问题。此时，你要以一种批判的、怀疑的态度来对待它。要搞清楚： <p>1）它所依赖的前提条件是什么？<br>2）应用它的时候有没有什么假设？<br>3）它在那些场景下适用、那些场景下不适用？<br>4）它在解决原有问题之后，有没有引入新的问题？ <p>3、当你达到专家级或顶级水平之后，应该持有一种“独孤求败”的心态：寻求新的挑战，争取“百尺竿头更进一步”，就像独孤求败一样，”闯荡江湖，只求一败 “：把每次的失败看成进步的机会。同时保持敬畏、谦虚的心态，你所掌握的知识，也不是”银弹“，也有其局限之处，或者随着环境的发展，已经无法适应环境，需要寻求新的突破。这个时候，你要根据你丰富的实践，提出创新的思路或知识。<br>总之：<br>1、在学习新知识、新领域的时候，要保持一个空杯的心态，只有这样才能为自己敞开自我提升之路。<br>2、偏见导致对新知识的排斥，教条倒是对新知识的盲从。<br>3、没有绝对的真理，也没有绝对的谬论。绝对的真理让我们盲从，绝对的谬论让我们偏见。</p><img src ="http://www.blogjava.net/chgaowei/aggbug/297959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chgaowei/" target="_blank">常高伟</a> 2009-10-12 20:13 <a href="http://www.blogjava.net/chgaowei/archive/2009/10/12/297959.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>