<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Anders小明的Blog</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/1669/rss</id><updated>2011-07-03T02:29:41Z</updated><author><name>Anders小明</name><uri>http://www.cnblogs.com/yimlin/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimlin/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/1669/rss"/><entry><id>http://www.cnblogs.com/yimlin/archive/2011/07/01/2095575.html</id><title type="text">关于架构的思考</title><summary type="text">关于软件架构的介绍有很多，但居多是针对具体应用的架构说明，对架构本身进行介绍较少。本文试图从架构是什么、架构有什么、架构如何来以及架构如何评价四个角度分享一些思考，希望能抛砖引玉。</summary><published>2011-07-01T08:12:00Z</published><updated>2011-07-01T08:12:00Z</updated><author><name>Anders小明</name><uri>http://www.cnblogs.com/yimlin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimlin/archive/2011/07/01/2095575.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimlin/archive/2011/07/01/2095575.html"/><content type="html">　　作者： Anders小明&amp;nbsp;&amp;nbsp;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 21pt;"&gt;&lt;strong&gt;&lt;span&gt;&lt;br /&gt;一、&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span dir="ltr"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;架构是什么&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;通常关于架构的第一个问题是架构是什么，很自然也很正常，本文也不能免俗。然而关于这个问题却没有一致性答案，同时也要注意到不同应用的架构实质上存在不同差异性。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt;"&gt;&lt;span&gt;(一)&amp;nbsp;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;架构的定义&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;架构，虽然人们一直在讨论它，甚至于每天都在同其工作，然而这个词并没有一个被业界广泛认可的定义。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;大致而言，架构的定义分为三类：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;table cellpadding="0" cellspacing="0" border="1" style="border-collapse: collapse; margin-left: 23.4pt;"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="72" valign="top" style="padding-bottom: 0cm; padding-left: 5.4pt; width: 54pt; padding-right: 5.4pt; background: navy; padding-top: 0cm; border: windowtext 1pt solid;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: white;"&gt;类别&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="465" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 348.7pt; padding-right: 5.4pt; background: navy; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: white;"&gt;定义&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="72" rowspan="3" valign="top" style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 54pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;结构论&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="465" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 348.7pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;牛津高阶词典: The design an structure of a computer system&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="465" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 348.7pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="font-family: 宋体;"&gt;韦氏大辞典&lt;/span&gt;: &lt;span style="font-family: 宋体;"&gt;The way in which the parts of a computer are organized&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="465" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 348.7pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;IEEE&lt;span style="font-family: 宋体;"&gt;: The fundamental organisation of a system embodied in its components, their relationships to each other, and to the environment,and the principle guiding its design and evolution&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="height: 12.45pt;"&gt;&#xD;
&lt;td width="72" valign="top" style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 54pt; padding-right: 5.4pt; height: 12.45pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;关键论&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="465" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 348.7pt; padding-right: 5.4pt; height: 12.45pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;架构是系统中最关键的20%，关注在系统非功能性需求&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr style="height: 12.45pt;"&gt;&#xD;
&lt;td width="72" valign="top" style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 54pt; padding-right: 5.4pt; height: 12.45pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;文化论&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="465" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 348.7pt; padding-right: 5.4pt; height: 12.45pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;架构是关于系统一些的决策&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt;"&gt;&lt;span&gt;(二)&amp;nbsp;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;架构的分类&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;架构由于应用的不同而存在不同。大体而言，我们可以将当前的应用分为如下四种：互联网应用、企业应用、桌面/移动应用和游戏。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;需要一提的是，虽然几种应用的存在一定的模糊性，某种技术为多种应用所共用，例如很多的企业应用基于互联网技术SaaS，以及移动设备的支持。但依然存在很大的不同。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;特别的，对于企业架构，大体存在如下几种流派：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42.55pt;"&gt;&lt;span style="font-family: 宋体;"&gt;1.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;TOGAF&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;， OpenGroup组织提出，围绕业务、应用、技术和数据四个方面描述架构；&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42.55pt;"&gt;&lt;span style="font-family: 宋体;"&gt;2.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;DoDAF/MoDAF&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，美国和英国国防部提出的架构方案；&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42.55pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;Zachman Framework&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;， 根据不同角色的5W1H来审视架构；&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42.55pt;"&gt;&lt;span style="font-family: 宋体;"&gt;4.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;4+1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;视图，由Philippe Kruchten提出，并被RUP采纳；&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt;"&gt;&lt;span&gt;(三)&amp;nbsp;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;架构的关键非功能指标&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;通常来讲，架构所关注的非功能需求可以分为三个角度&lt;/span&gt;5&lt;span style="font-family: 宋体;"&gt;个特性，如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;table cellpadding="0" cellspacing="0" border="1" style="border-collapse: collapse; margin-left: 21pt;"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="87" valign="top" style="padding-bottom: 0cm; padding-left: 5.4pt; width: 65.4pt; padding-right: 5.4pt; background: navy; padding-top: 0cm; border: windowtext 1pt solid;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: white;"&gt;角度&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="96" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 72pt; padding-right: 5.4pt; background: navy; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: white;"&gt;特性&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="351" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 263pt; padding-right: 5.4pt; background: navy; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: white;"&gt;说明&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="87" rowspan="2" valign="top" style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 65.4pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;运营角度&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="96" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 72pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;伸缩性&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="351" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 263pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;主要为水平扩展能力&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="96" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 72pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;可靠性&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="351" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 263pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;包括容错性、可用性和安全性等；&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="87" rowspan="2" valign="top" style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 65.4pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;开发角度&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="96" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 72pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;维护性&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="351" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 263pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="96" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 72pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;扩展性&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="351" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 263pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;能否快速应对业务的变化&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="87" valign="top" style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 65.4pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;应用角度&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="96" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 72pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;易用性&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="351" valign="top" style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 263pt; padding-right: 5.4pt; border-top: medium none; border-right: windowtext 1pt solid; padding-top: 0cm;"&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;对最终用户是否友好&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p style="margin-left: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;非功能性指标当然不止这些，如下是一些参考：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt;"&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;ISO 9126&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;提出的质量特性：&lt;/span&gt;&lt;/p&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img height="233" width="416" src="http://www.blogjava.net/images/blogjava_net/anderslin/ArchQuality.png" border="0" style="z-index: 0; position: relative; display: inline-block; float: none; clear: both;" /&gt;&lt;br /&gt;&lt;br /&gt;&#xD;
&lt;p style="margin-left: 42pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt;"&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;或者通过如下三个视图来进行：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -69.05pt; margin-left: 69.05pt;"&gt;&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;业务视角&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 59.95pt;"&gt;Time To Market&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Cost and Benefits&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Projected life time&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Targeted Market&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Integration with Legacy System&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Roll back Schedule&lt;/p&gt;&#xD;
&lt;p style="text-indent: -69.05pt; margin-left: 69.05pt;"&gt;&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ii.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;最终用户视角&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 59.95pt;"&gt;Performance&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Availability&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Usability&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Security&lt;/p&gt;&#xD;
&lt;p style="text-indent: -69.05pt; margin-left: 69.05pt;"&gt;&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iii.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;开发视角&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 59.95pt;"&gt;Maintainability&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Portability&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Reusability&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Testability&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt;"&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;也可以通过诸如：简洁性、清晰和一致性等指标。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;不同类型的应用关注点会有很大不同，例如：互联网应用由于面临大量的最终用户，会特别关注于伸缩性、可靠性和易用性，这并不是说互联网应用不关注维护性和扩展性，只是会更加强调另外三个特性；而企业应用由于关注于数据、流程以及业务的适应性，会更多得强调维护性和扩展性，而其他特性如易用性相对弱化（面对内部用户，强制使用），伸缩性（内部用户访问量少，大部分情况下通过现有硬件即可支持）。同时，企业应用对数据一致性和准确性要求非常高，而互联网应用相对可以容忍一定的不一致性和错误。&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;因此，一个企业应用的架构师可能无法设计互联网应用的架构。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 21pt;"&gt;&lt;strong&gt;&lt;span&gt;二、&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span dir="ltr"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;架构有什么&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;架构有什么，通常会来一张或者一堆好看的图画。既然本篇不讨论具体应用，故而也拿不出啥图了，也不想讨论这些。因为不同的应用存在的差异，非本文所能涵盖。这里就想讨论下形形色色架构图的背后的内容，以及隶属架构但未在架构图表达的内容。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;《易经&amp;middot;系辞》有云：&amp;ldquo;形而上者谓之道，形而下者谓之器&amp;rdquo;，将架构分为&amp;ldquo;形而上&amp;rdquo;和&amp;ldquo;形而下&amp;rdquo;两个部分，如下图：&lt;/span&gt;&lt;/p&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img height="248" width="470" src="http://www.blogjava.net/images/blogjava_net/anderslin/ArchitectureS.png" border="0" /&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt;"&gt;&lt;span&gt;(一)&amp;nbsp;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;形而上&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin-left: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;形而上体系中，除去前置内容，分为文化和支撑两大块。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin-left: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;其中，文化部分里最重要的就是&lt;strong&gt;原则&lt;/strong&gt;和&lt;strong&gt;方法论&lt;/strong&gt;，例如：关注点分离原则（&lt;/span&gt;SoC&lt;span style="font-family: 宋体;"&gt;），面向对象分析设计和领域驱动设计等等。在此之下，就是&lt;strong&gt;架构模式&lt;/strong&gt;和&lt;strong&gt;算法&lt;/strong&gt;，常见架构模式为：结构化（分层、管道流、黑板）、分布式（代理和管道流）、交互系统（&lt;/span&gt;MVC&lt;span style="font-family: 宋体;"&gt;和&lt;/span&gt;PAC&lt;span style="font-family: 宋体;"&gt;）和适配系统（微内核、元数据）。当然还有更低一层次的设计模式（创建、结构和行为）。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt;"&gt;&lt;span&gt;(二)&amp;nbsp;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;形而下&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin-left: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;形而下分为三个部分，运行时、工具和文档。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin-left: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;其中，运行时的内容按照重要性依次为：语言、平台&lt;/span&gt;/&lt;span style="font-family: 宋体;"&gt;中间件、框架、类库和工具，具体在企业应用中就是：&lt;/span&gt;Java/C#&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Windows/Linux&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Application Server/Database&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;Spring/Hibernate&lt;span style="font-family: 宋体;"&gt;等等。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin-left: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;如果说运行时决定最终能力，则工具就事关效率。工具中最常见的是集成开发环境了，此外还有配置、部署和测试工具。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin-left: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;文档部分是另一个重要的内容，应包括：视图（从不同角色出发，可以参考&lt;/span&gt;4+1&lt;span style="font-family: 宋体;"&gt;），范例和各种指导参考文档。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin-left: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin-left: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 21pt;"&gt;&lt;strong&gt;&lt;span&gt;三、&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span dir="ltr"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;架构如何设计&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;如果把&amp;ldquo;形而下&amp;rdquo;当成架构设计的产出，那么架构设计往前追溯，就有输入&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;和加工过程。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt;"&gt;&lt;span&gt;(一)&amp;nbsp;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;架构的输入&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 42pt;"&gt;&lt;span style="font-family: 宋体;"&gt;架构的输入包括三个部分：目标、需求和相应约束。其中：目标是大方向内容，需求关注在细节，而约束对目标的达成提供了限定。特别的，关注在非功能性指标上。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt;"&gt;&lt;span&gt;(二)&amp;nbsp;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;架构的设计过程&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 42pt;"&gt;&lt;span style="font-family: 宋体;"&gt;架构的设计从需求分析开始，结合参考模型或者已有架构体系，结合原则、方法论等等作料。其主要活动有：技术选型、脚手架&lt;/span&gt;/&lt;span style="font-family: 宋体;"&gt;框架&lt;/span&gt;/&lt;span style="font-family: 宋体;"&gt;平台搭建等等。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;关于具体过程的描述，可见《如何定义和建立架构》。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 21pt;"&gt;&lt;strong&gt;&lt;span&gt;四、&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span dir="ltr"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;架构如何评估&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;架构设计出后一个重要的工作是对架构（形而下部分）进行评估，进行架构评估的必要性在：使得架构设计工作形成闭环，确保当前架构是合适和正确的。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;大体上，架构评估有三种方法：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left" style="text-align: left; text-indent: 21.3pt; margin-left: 0cm;"&gt;&lt;span style="font-family: Symbol; font-size: 10pt;"&gt;&amp;middot;&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: Arial; font-size: 9.5pt;"&gt;ATAM: Architecture Tradeoff Analysis Method&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left" style="text-align: left; text-indent: 21.3pt; margin-left: 0cm;"&gt;&lt;span style="font-family: Symbol; font-size: 10pt;"&gt;&amp;middot;&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: Arial; font-size: 9.5pt;"&gt;SAAM: Software Architecture Analysis Method&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left" style="text-align: left; text-indent: 21.3pt; margin-left: 0cm;"&gt;&lt;span style="font-family: Symbol; font-size: 10pt;"&gt;&amp;middot;&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: Arial; font-size: 9.5pt;"&gt;ARID: Active Reviews for Intermediate Designs&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 17.85pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在进行架构评估工作时，首先要确定架构评估的参与人，包括相应的干系人和独立的评估队伍；然后是确定评估的时机：早期（在架构设计期间就参与评估）和晚期（传动的，在架构设计完成后）。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;评估内容包括如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt;"&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;首先是要满足其输入：目标、需求和约束；&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt;"&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;span style="font-family: 宋体;"&gt;各项的非功能性指标；&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 21pt;"&gt;&lt;strong&gt;&lt;span&gt;五、&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span dir="ltr"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;小结&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;以如下思维导图作为本文的小结：&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img height="363" width="482" src="http://www.blogjava.net/images/blogjava_net/anderslin/ArchitectureMM.png" border="0" /&gt;&lt;img src="http://www.cnblogs.com/yimlin/aggbug/2095575.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yimlin/archive/2011/07/01/2095575.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yimlin/archive/2010/10/31/1865527.html</id><title type="text">如何定义和建立架构</title><summary type="text">任何系统都有架构，无论多小的系统都有，区别在于其架构是否是经过明确设计并表达。一个合理的架构无疑是经过精心设计和维护的，如何定义和建立架构，本文分享一些实践和思考，希望能抛砖引玉。</summary><published>2010-10-31T03:41:00Z</published><updated>2010-10-31T03:41:00Z</updated><author><name>Anders小明</name><uri>http://www.cnblogs.com/yimlin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimlin/archive/2010/10/31/1865527.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimlin/archive/2010/10/31/1865527.html"/><content type="html">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;作者： Anders小明 &amp;nbsp; &#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;在牛津高阶词典（第&lt;/span&gt;7&lt;span style="font-family: 宋体"&gt;版）中，架构（&lt;/span&gt;architecture&lt;span style="font-family: 宋体"&gt;）一词的解释是：&lt;/span&gt;the design an structure of a computer system&lt;span style="font-family: 宋体"&gt;。这个解释实际上已经描述了架构的本质：架构是关于怎么做（构成系统）的，而非做什么的。更进一步，架构是由人来设计实施，因此架构实际上是一个文化（&lt;/span&gt;culture&lt;span style="font-family: 宋体"&gt;）&amp;#8212;&amp;#8212;我们怎么认识或理解系统&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;产品的，并且我们准备怎么做，在做的过程中我们认为什么是好的，什么是好的等等。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;任何系统都有架构，无论多小的系统都有。区别在于其架构是否是经过明确设计并表达。一个合理的架构无疑是经过精心设计和维护的，而进行架构设计，或者说定义&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;建立一个架构可以分为如下几个步骤。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;特别的，本文针对于企业应用架构，其他应用未必适用。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: 21pt" align="left"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;基线准备&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;如果建立第一版架构（即从零开始）可以跳过此步，但对于建立第&lt;/span&gt;n&lt;span style="font-family: 宋体"&gt;版（&lt;/span&gt;n&amp;gt;=2&lt;span style="font-family: 宋体"&gt;）架构，则需要进行基线准备。通常从上一个架构设计开始，去除不在必要的内容作为基线。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: 21pt" align="left"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;非功能性需求的收集、分析和细化&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;这步骤非常关键，本质上架构关注的是系统的非功能性需求，虽然不是系统的全部，但无疑是最重要的&lt;/span&gt;20%&lt;span style="font-family: 宋体"&gt;，而这也是不同公司&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;产品的架构差异性的根源。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;一个完整的非功能性需求列表不仅仅来自业务部门（系统客户），还需要包括开发&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;研发管理层以及开发团队。实践中可以如下检查列表来帮助收集：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;目标应用，企业应用和互联网应用就不太相同&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;目标环境，系统部署的硬件环境、网络环境等，更有云计算环境和传统服务器环境的差异。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;常见技术指标&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;稳定性&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;可用性，主要是&lt;/span&gt;MTBF&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;MTBR&lt;span style="font-family: 宋体"&gt;指标要求&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;性能，如&lt;/span&gt;Web&lt;span style="font-family: 宋体"&gt;应用下单次操作&lt;/span&gt;1/5/10&lt;span style="font-family: 宋体"&gt;原则，相关并发压力要求等&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;容量，主要是数据容量，此外有时还要考虑内存的限制&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;实时性，涉及到数据同步&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;复制&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;消息传播&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;异步操作&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;易用性，这个指标不容易衡量&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;系统&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;项目&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;产品自身，来自客户&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;管理指标，主要来自管理层&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;成熟度&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;培训招聘成本&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;产品化&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;定制化&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;组件化&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;领域化&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;标准性&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;平台化&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;小型中间件&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;集成性&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;兼容&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;迁移能力&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin-left: 63pt"&gt;&lt;span style="font-family: 宋体"&gt;涉及遗留系统，关于兼容需要明确的兼容方式和兼容模式。兼容方式包括：语义兼容&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;源代码（语言级&lt;/span&gt;/API&lt;span style="font-family: 宋体"&gt;级）兼容&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;运行时兼容（运行库&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;二进制）；兼容模式：向前兼容&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;向后兼容。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;1.4.6 &lt;span style="font-family: 宋体"&gt;容错性&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin-left: 42pt"&gt;&lt;span style="font-family: 宋体"&gt;包括速错能力和消除易错机制（&lt;/span&gt;error-prone mechanism&lt;span style="font-family: 宋体"&gt;）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;n&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;1.4.7 &lt;span style="font-family: 宋体"&gt;升级性&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;以上列表略显草根性，实际过程中也可以从架构评估角度反向进行非功能性需求收集，可以参考《&lt;/span&gt;Attribute Based Architectural Evaluation&lt;span style="font-family: 宋体"&gt;》。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;一次性完整地收集非功能性需求并不是件容易的事，因此在架构发布后也要不停的进行改进。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: 23.1pt" align="left"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;架构定义&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;完成非功能性需求并明确后，就可以进行架构定义了。架构定义可以分为三个部分：设计、选型以及构建和评估。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-family: 宋体"&gt;架构设计&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;这个阶段相对务虚，但却是整个架构定义的基础，决定了所有的后续工作。主要包括如下三个工作内容：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;确定架构手段，包括架构的原则、规范、模式、工具、框架&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;平台和语言，以及这些手段的适用范围，哪些问题应用工具来解决，而另一些问题采用哪个框架&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;平台完成，还有一些通过原则或规范处理。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;确定组织分工和流程，不同的工作通过组织内不同角色完成。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;确定结构化范围，区分系统内和系统外，并非所有非功能性需求都是通过系统的手段解决，适当采用系统外手段甚至更简单和准确。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-family: 宋体"&gt;技术选型&lt;/span&gt;/&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-family: 宋体"&gt;预研&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;纸面上的架构其约束性和可操作性非常低，为了让架构从三万英尺的高空落地有两种办法：流程和平台。其中，流程是由组件分工完成，而平台构建通常不会从零开始，实践中会尽可能利用已有成果：商业产品和开源产品。因此技术选型以及预研工作则显得非常重要。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;进行技术选型需要注意两个关键点：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;u&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;评估单项技术的有用性（技术功能）和可用性（非功能性需求，即使用成本）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin-left: 42pt"&gt;&lt;span style="font-family: 宋体"&gt;有用性是指相应的技术功能点是否解决架构所面临的功能性和非功能性需求；&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin-left: 42pt"&gt;&lt;span style="font-family: 宋体"&gt;可用性是指是否满足整体的非功能性需求，如性能、容量和稳定性。以及管理层关注指标（使用成本），如技术成熟度、标准性、培训招聘成本以及产品的生命周期，以及&lt;/span&gt;License&lt;span style="font-family: 宋体"&gt;费用等。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 63pt"&gt;&lt;span style="font-family: Wingdings"&gt;u&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;保持全局视角&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 63pt"&gt;&lt;span style="font-family: 宋体"&gt;关注全局，木桶理论的再次应用，避免某项技术存在的缺陷影响整体。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;主要的选型内容如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;语言，不同语言所能提供的开发能力是不同。而且开发语言直接影响到后续技术的选型以及人员的招聘。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;框架&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;平台，提供运行环境和集成环境。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;工具，古话说：磨刀不误砍柴工。但要注意避免工具中心论，正确认识工具的用于&amp;#8212;&amp;#8212;工具是帮助我们解决一些脏活累活的，除此外无它。在整个架构中，工具的作用是大大低于语言和框架&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;平台。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;除去技术选型外，对于一些不确定的内容，还需开展预研工作，验证其可行性或者进行性能测试。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-family: 宋体"&gt;架构构建和评估&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;如前所述为了使架构落地，在技术选型后完成后进行架构构建，包括了定制化设计和开发，并进行质量保证。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;架构构建的结果通常分为三个层次：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;集成环境，提供一个开发的脚手架，这个是最低层次。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;编程模型，提供一个统一的编程模型，包含了自定义框架和类库，并对底层技术提供了一定封装和隐藏。当前的趋势是：提供一个&lt;/span&gt;POJO&lt;span style="font-family: 宋体"&gt;一致性的编程模型。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;运行平台，提供了一个运行平台，（勉强）可以算做一个中间件产品。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;架构构建过程中应注意如下内容：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;应用区分平台系统和应用开发接口&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 42pt"&gt;&lt;span style="font-family: 宋体"&gt;应用开发接口是给后续产品开发使用，接口一旦设计发布应当保持问题性和兼容性；而平台系统对后续系统开发不可见，避免兼容设计成本，有利后续升级和变化。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;简单的&lt;/span&gt;API&lt;span style="font-family: 宋体"&gt;，强大的功能，类似于高级语言&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;可以扩展的&lt;/span&gt;SPI&lt;span style="font-family: 宋体"&gt;，另一种形式的&lt;/span&gt;API&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;消除易错机制（&lt;/span&gt;error-prone mechanism&lt;span style="font-family: 宋体"&gt;），避免当错误使用后的修正成本太高&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;适应变化和二八原则，避免在需求变化时后调整的成本过高&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;隔离具体技术，保持未来的迁移性和可升级性&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;提供调用接口和模型应具备一定抽象性&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;分离关注点，纵向的层次化抽象，以及横向的模块与切面&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;提供申明式定义（如&lt;/span&gt;XML&lt;span style="font-family: 宋体"&gt;），由反向解析映射到具体技术，关注于做什么而非怎么做。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;架构完成构建后，进入架构评估。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;架构评估是确保架构有效性的重要步骤，需要针对所收集到的非功能性需求&amp;#8212;&amp;#8212;工作上形成一个闭环，确保工作的有效性&amp;#8212;&amp;#8212;因为架构涉及系统中最重要的&lt;/span&gt;20%&lt;span style="font-family: 宋体"&gt;，应该尽早验证，而不是简单地希望一切都好。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;架构评估包括两个工作：进行验证和协助。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;可以根据非功能性需求列表来制定验证点，这里列举下主要的验证点：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;技术点验证&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;性能压力验证&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;稳定性验证&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;更正规的评估方法可以参考《&lt;/span&gt;Attribute Based Architectural Evaluation&lt;span style="font-family: 宋体"&gt;》。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;协助是架构评估的另一项工作。架构不是几个人关在一个房间里整出来的与世隔绝的东西。需要项目&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;系统&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;产品的等相关利益者理解它。这项工作不应是发布几份文档宣称架构如此如此（见后续《架构发布》），它应当在架构评估时进行（虽然可以在架构构建时进行，但是由于此时架构并未成形，此时的效果有限）。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: 23.1pt" align="left"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;架构发布&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;当架构构建完成并通过评估，架构就可以正式发布了。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-family: 宋体"&gt;框架&lt;/span&gt;/&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-family: 宋体"&gt;平台和工具&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;毫无疑问，框架&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;平台和工具是架构发布主要内容之一。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-family: 宋体"&gt;文档&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;除去框架框架&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;平台和工具，还有其他重要的内容需要发布，文档无疑必须的。但文档也存在尴尬的情况，已知的工程实践中已经发布了太多无用的文档、过期的文档。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;应努力保证所发布文档的必要性和有效性，建议文档如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;架构介绍，可以参考&lt;/span&gt;RUP4+1&lt;span style="font-family: 宋体"&gt;视图，部署视图、运行视图、开发视图等&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;快速入门&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;开发指南&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;服务配置和使用介绍&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-family: 宋体"&gt;示例代码&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;完整可用的代码，运行脚本、注释。完整丰富的示例代码在很多时候比文档更直接，尤其在展示细节问题上。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-family: 宋体"&gt;培训和指导&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;很多时候，培训和指导被忽略了。相对于文档和示例代码，培训和指导更有互动性，可以更深入讨论，并可以深入到架构设计背后的故事。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: 21pt" align="left"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;架构改进&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;如前所述，通常无法一次收集完整地非功能性需求；而随着时间发展，更新更细节的非功能性需求会不断的涌现和被发现；还有一部分之前已识别但被暂时搁置的非功能性需求开始变得重要。因此架构需要不断发展，而此时的改进通常是以小步快跑的方式进行。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: 21pt" align="left"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;下一个周期&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;不能期望&lt;/span&gt;10&lt;span style="font-family: 宋体"&gt;年前的架构能够满足今天的需求（它可能依然可以工作）。架构发布后到一定阶段，已经无法通过小的改进满足新的要求，重新进行架构设计成为一个必然。而当前的架构设计可以转为下一次设计的基线。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; text-indent: 21pt" align="left"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;常见的问题&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;试图创建一个私有的编程模型标准&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;很少有人这么干，不过有时还遇到这样的做法。通常在封装一些商业或开源产品，美名其曰&amp;#8212;&amp;#8212;隔离实现，这是一个危险的做法，其实质是创建一个私有编程模型标准，如果业界没有纸上标准或实际标准，基于某个产品实现所建立的私有标准无法真正的迁移到别的产品实现；如果有，那就根本不需要建立私有标准。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;另有一种封装，其目的是为了简化商业或开源产品，这种封装不打算屏蔽底层的实现&amp;#8212;&amp;#8212;它只是让工作更简单。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;如果一定要创建一个编程模型的话，应该是&lt;/span&gt;POJO&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;不那么正确的二八原理&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;二八原理通常很有效，然而它有缺陷&amp;#8212;&amp;#8212;他是基于统计的，这意味着是事后应对。如果没有已有实践经验，那么在一开始很难做出正确判断。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;而一旦做出错误的决策导致的问题，很可能出现&amp;#8220;玻璃裂纹&amp;#8221;现象&amp;#8212;&amp;#8212;不断的扩散并破坏架构设计&amp;#8212;&amp;#8212;直到玻璃碎掉。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;更槽糕的是，很多时候所谓的二八划分，基于的是感觉而非统计。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin-left: 42pt"&gt;&lt;span style="font-family: Wingdings"&gt;l&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;过分关注在技术模型上&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;虽然架构针对的非功能性需求，关注在技术模型没有问题，但是实际上更应关注的是信息模型。而在多数情况下，信息模型是以层的形式来表示。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;这里面最典型的是所谓的&lt;/span&gt;&lt;span&gt;N&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;层（n-tier&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;）模型&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;，实际上，&lt;/span&gt;N&lt;span style="font-family: 宋体"&gt;层（&lt;/span&gt;n-tier&lt;span style="font-family: 宋体"&gt;）模型就是一个技术模型，描述的一个分布式系统结构。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;而真正的&lt;/span&gt;N&lt;span style="font-family: 宋体"&gt;层（&lt;/span&gt;n-layer&lt;span style="font-family: 宋体"&gt;）设计却被忽视，分层&lt;/span&gt;Layer&lt;span style="font-family: 宋体"&gt;模式才是一个架构模式（见&lt;/span&gt;POSA vol1&lt;span style="font-family: 宋体"&gt;），&lt;/span&gt;ISO-7&lt;span style="font-family: 宋体"&gt;层网络协议是一个典型示例。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yimlin/aggbug/1865527.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yimlin/archive/2010/10/31/1865527.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yimlin/archive/2010/02/21/1670499.html</id><title type="text">企业应用下的业务组件开发实践</title><summary type="text">简要描述了在企业应用环境下进行组件化开发实践的体会：什么是企业应用下的组件，现有的开发技术以及组件技术（标准）存在的问题，组件间关系，以及如何将组件化开发实践落地。</summary><published>2010-02-21T06:07:00Z</published><updated>2010-02-21T06:07:00Z</updated><author><name>Anders小明</name><uri>http://www.cnblogs.com/yimlin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimlin/archive/2010/02/21/1670499.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimlin/archive/2010/02/21/1670499.html"/><content type="html">作者：&amp;nbsp; Anders小明 &#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;&lt;br /&gt;什么是企业应用下的业务组件&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;首先，这是一个组件，这意味着它需要在容器里运行，因此不包括任何中间件服务，同时以一定结构（文件结构或者压缩格式）组成，被容器识别；其次，这是一个业务组件，即提供的是应用服务，而非技术服务；第三，这是企业应用，在业务上包括功能和服务（&lt;/span&gt;Service&lt;span style="font-family: 宋体"&gt;，当前最时髦的说法，你可以理解为&lt;/span&gt;API&lt;span style="font-family: 宋体"&gt;），技术上（以&lt;/span&gt;J2EE&lt;span style="font-family: 宋体"&gt;来讲）包括：&lt;/span&gt;UI&lt;span style="font-family: 宋体"&gt;资源（&lt;/span&gt;JSF&lt;span style="font-family: 宋体"&gt;、&lt;/span&gt;JSP&lt;span style="font-family: 宋体"&gt;、&lt;/span&gt;JS&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;CSS&lt;span style="font-family: 宋体"&gt;等）、应用程序（&lt;/span&gt;Java&lt;span style="font-family: 宋体"&gt;）资源和配置文件、数据库表定义、初始化数据和存储过程。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;为什么要企业应用下的业务组件&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;组件技术从提出到现在已经有&lt;/span&gt;20&lt;span style="font-family: 宋体"&gt;多年了，为什么要提企业应用业务组件？因为现有的组件技术不支持企业应用环境下的组件要求，&lt;/span&gt;J2EE&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;EJB&lt;span style="font-family: 宋体"&gt;不支持，&lt;/span&gt;.NET&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;也不支持。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;如前所述，一个企业应用通常包括了交互界面、应用代码以及数据库结构，而不论是&lt;/span&gt;EJB&lt;span style="font-family: 宋体"&gt;还是&lt;/span&gt;DLL&lt;span style="font-family: 宋体"&gt;只支持应用代码，都不包括交互界面和数据库结构。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体"&gt;如果说&lt;/span&gt;EJB&lt;span style="font-family: 宋体"&gt;不是，那么&lt;/span&gt;J2EE&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;EAR&lt;span style="font-family: 宋体"&gt;或者&lt;/span&gt;WAR&lt;span style="font-family: 宋体"&gt;是否算是一个组件？答案也不是，&lt;/span&gt;EAR&lt;span style="font-family: 宋体"&gt;或者&lt;/span&gt;WAR&lt;span style="font-family: 宋体"&gt;部署的是一个企业应用，请注意&lt;/span&gt;EJB&lt;span style="font-family: 宋体"&gt;规范中明确说：&lt;/span&gt;The Enterprise JavaBeans architecture is a architecture for the development and deployment of component-based (distributed) business applications(EJB 2.x&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;3.x&lt;span style="font-family: 宋体"&gt;唯一的区别是&lt;/span&gt;2.x&lt;span style="font-family: 宋体"&gt;有&lt;/span&gt;distributed&lt;span style="font-family: 宋体"&gt;），它们有自己的应用域，彼此相互隔离（简单的看，它们有各自独立的会话管理）。&lt;/span&gt;.NET&lt;span style="font-family: 宋体"&gt;也是有自己的应用域概念。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;更进一步，基于应用的部署导致了三个隔离问题：&lt;strong&gt;交互（界面）隔离&lt;/strong&gt;、&lt;strong&gt;程序访问隔离&lt;/strong&gt;和&lt;strong&gt;数据隔离&lt;/strong&gt;（请注意这三个问题分别对应了企业应用业务组件的三个技术内容）。交互隔离导致了企业用户必须访问不同界面，代码访问隔离导致了点对点的集成以及诸如性能、事务和异步处理等各种非功能性问题，而数据隔离导致了数据有效性、一致性等等问题。所有这些都进而导致了维护的问题。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;为了解决这些问题，大厂商们都提出了各种解决方案：&lt;/span&gt;Portal&lt;span style="font-family: 宋体"&gt;来解决交互隔离问题，通过&lt;/span&gt;ESB&lt;span style="font-family: 宋体"&gt;来解决代码访问隔离问题，以及通过所谓的信息服务（&lt;/span&gt;Information Service&lt;span style="font-family: 宋体"&gt;）来解决数据隔离问题。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;那么&lt;/span&gt;OSGi&lt;span style="font-family: 宋体"&gt;技术或者&lt;/span&gt;SCA&lt;span style="font-family: 宋体"&gt;技术能否满足要求？答案是目前不能，&lt;/span&gt;OSGi&lt;span style="font-family: 宋体"&gt;最初开发的目的就不是为了企业应用，只是这几年开始成熟，并向企业应用方向发展。&lt;/span&gt;09&lt;span style="font-family: 宋体"&gt;年推出的企业版（草案）刚刚提出针对程序访问问题的方案，如远程服务、事务管理等；交互隔离问题上规范并没有提出相应方案，只有&lt;/span&gt;Eclipse&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;Equinox&lt;span style="font-family: 宋体"&gt;提出了界面的扩展点机制，但这也不能解决&lt;/span&gt;B/S&lt;span style="font-family: 宋体"&gt;环境的问题；而数据隔离问题就没有任何方案。&lt;/span&gt;SCA&lt;span style="font-family: 宋体"&gt;从一开始就是面向企业应用，不过不解决交互隔离和数据隔离问题。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;此外，对于行业&lt;/span&gt;ISV&lt;span style="font-family: 宋体"&gt;来说，除企业用户面临的这些种种问题，还面临着其它问题。企业用户毕竟只是面对自己的需求，行业&lt;/span&gt;ISV&lt;span style="font-family: 宋体"&gt;却面临着多个企业用户的需求，面临定制化带来的维护问题，特别是业务和技术的隔离问题（即如何保持构建业务组件的所使用技术的平稳升级）。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;组件的容器&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;既然要企业应用下的业务组件，而现有的组件技术又无法支撑，那么就需要一个新的组件容器了（当然，作为一个普通开发人员，我们无法新建一个公开标准的组件体系，也独立维护一个私有的）。新的组件容器完全使用现有的中间件技术，并加上一些新的内容，包括如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;ol style="margin-top: 0cm" type="1"&gt;&lt;li&gt;&lt;span style="font-family: 宋体"&gt;组件框架，识别组件，以及组件（文件）结构和各个技术工件。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 宋体"&gt;技术框架，提供业务无关的技术支持，以便于技术的平稳升级切换。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 宋体"&gt;运行容器，采用现有中间件技术，包括&lt;/span&gt;Tomcat&lt;span style="font-family: 宋体"&gt;、应用服务器和数据库服务等；&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 宋体"&gt;工具，包括打包以及部署工具等。&lt;/span&gt; &lt;/li&gt;&lt;/ol&gt;&#xD;
&lt;p style="text-indent: 18pt"&gt;&lt;span style="font-family: 宋体"&gt;关于数据隔离问题，在&lt;/span&gt;EIP&lt;span style="font-family: 宋体"&gt;中提到了各种解决方案，这里采用的共享数据库方式，即各个组件都共用一个数据库，各个组件只提供数据库定义和初时数据（如同&lt;/span&gt;EJB/OSGi&lt;span style="font-family: 宋体"&gt;一样，运行时环境由容器提供）。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;组件的关系&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;组件的关系分为两种：依赖和联动。依赖关系在已有的组件技术上已经广为认知，而联动则是新创造的（肯定不是第一个创建的，只不过不同人有不同的叫法）。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;联动和依赖的区别是：如果有组件&lt;/span&gt;B&lt;span style="font-family: 宋体"&gt;和组件&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;联动，则组件&lt;/span&gt;B&lt;span style="font-family: 宋体"&gt;可以在没有组件&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;的情况下运行，并提供相应功能。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;针对三种不同技术工件（即三个隔离问题）呈现不同特点，如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;1. UI&lt;span style="font-family: 宋体"&gt;资源（交互隔离问题），依赖是指&lt;/span&gt;UI&lt;span style="font-family: 宋体"&gt;资源的嵌入、引用和替换，联动是指&lt;/span&gt;UI&lt;span style="font-family: 宋体"&gt;资源的新增。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;2. &lt;span style="font-family: 宋体"&gt;应用程序（程序访问隔离），依赖是指&lt;/span&gt;API/&lt;span style="font-family: 宋体"&gt;模型依赖，联动是指消息（传统消息和&lt;/span&gt;JMS&lt;span style="font-family: 宋体"&gt;消息）以及&lt;/span&gt;SPI&lt;span style="font-family: 宋体"&gt;实现。其中，无论是依赖或者联动都涉及到相应的非功能性需求，包括：异步、事务控制和服务时限等。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;3. &lt;span style="font-family: 宋体"&gt;数据库资源（数据隔离），依赖是指外键关联和级联操作，无明显的联动关系。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;这里，需要关注应用程序的依赖和联动&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;1. SPI&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;API&lt;span style="font-family: 宋体"&gt;存在业务不匹配问题。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;虽然组件&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;依赖组件&lt;/span&gt;B&lt;span style="font-family: 宋体"&gt;，但是不代表组件&lt;/span&gt;B&lt;span style="font-family: 宋体"&gt;提供的服务完全匹配组件&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;的要求。有时组件&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;所需要的数据需要组件&lt;/span&gt;B&lt;span style="font-family: 宋体"&gt;的多个&lt;/span&gt;API&lt;span style="font-family: 宋体"&gt;组成，为了开发方便或者组件&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;所需要的性能问题，可能会在组件&lt;/span&gt;B&lt;span style="font-family: 宋体"&gt;新写一个接口给组件&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;使用，注意该接口不是组件&lt;/span&gt;B&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;API&lt;span style="font-family: 宋体"&gt;，该接口仅适用于组件&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;2. &lt;span style="font-family: 宋体"&gt;尽可能的使用&lt;/span&gt;SPI&lt;span style="font-family: 宋体"&gt;集成方式&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;SPI&lt;span style="font-family: 宋体"&gt;集成方式是相对于&lt;/span&gt;API&lt;span style="font-family: 宋体"&gt;集成方式，&lt;/span&gt;API&lt;span style="font-family: 宋体"&gt;集成方式就是，组件&lt;/span&gt;B&lt;span style="font-family: 宋体"&gt;直接调用其它组件的&lt;/span&gt;API&lt;span style="font-family: 宋体"&gt;及其模型。&lt;/span&gt;SPI&lt;span style="font-family: 宋体"&gt;集成方式（类似于依赖倒置），组件&lt;/span&gt;B&lt;span style="font-family: 宋体"&gt;定义其所需要的接口及其模型，由组件&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;或者胶水层代码来实现。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;这个点对于行业&lt;/span&gt;ISV&lt;span style="font-family: 宋体"&gt;尤为明显。对于企业用户来说，依赖是明确的，组件&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;依赖&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;联动于组件&lt;/span&gt;B&lt;span style="font-family: 宋体"&gt;，但对于行业&lt;/span&gt;ISV&lt;span style="font-family: 宋体"&gt;，则面临着定制化问题，虽然组件&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;依赖&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;联动于组件&lt;/span&gt;B&lt;span style="font-family: 宋体"&gt;，但是在某个定制化项目中，由于客户已有系统&lt;/span&gt;C&lt;span style="font-family: 宋体"&gt;，而需要组件&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;依赖&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;联动于客户已有系统&lt;/span&gt;C&lt;span style="font-family: 宋体"&gt;。此时采用&lt;/span&gt;SPI&lt;span style="font-family: 宋体"&gt;方式。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;在开源世界里采用&lt;/span&gt;SPI&lt;span style="font-family: 宋体"&gt;方式更是广泛。很多框架为了兼容（同一功能）不同实现的类库，都是先定义框架所需接口，并同时提供不同类库的胶水代码。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;不论是&lt;/span&gt;EJB/OSGi/SCA&lt;span style="font-family: 宋体"&gt;都没有对&lt;/span&gt;SPI&lt;span style="font-family: 宋体"&gt;集成方式的支持。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;3. &lt;span style="font-family: 宋体"&gt;依赖和联动的非功能性需求。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;事实上，非功能性需求都是在集成时才存在的。以事务管理为例，除了及其少数的例子外，大部分事务只能在处理流程才被决定（注意，&lt;/span&gt;EJB&lt;span style="font-family: 宋体"&gt;在这方面着是定义在&lt;/span&gt;API&lt;span style="font-family: 宋体"&gt;上的，这样的设计是不适应需求的），而组件&lt;/span&gt;A&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;API&lt;span style="font-family: 宋体"&gt;在用例&lt;/span&gt;1&lt;span style="font-family: 宋体"&gt;中需要被异步调用，而在用例&lt;/span&gt;2&lt;span style="font-family: 宋体"&gt;中需要被同步调用是常见的。即便是&lt;/span&gt;OSGi&lt;span style="font-family: 宋体"&gt;规范，也在这方面没有任何处理。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;组件的定制化&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;定制化问题只针对于行业&lt;/span&gt;ISV&lt;span style="font-family: 宋体"&gt;有效，对于企业用户来说，除非是那种跨国企业在面临不同国度的业务模式、法律监管和会计制度等差异，存在定制化需要，即使如此，&lt;/span&gt;ISV&lt;span style="font-family: 宋体"&gt;和企业用户对于同一问题的解决方式也是不同的。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;既然我们已经将原有的应用采用组件化方式开发，那么应用的定制化问题就转化为组件的定制化问题。同样，应用的定制化手段也就转化为组件的定制化手段。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;组件框架&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体"&gt;罗罗嗦嗦的说了半天，有人就说了：这不就是把&lt;/span&gt;UI&lt;span style="font-family: 宋体"&gt;、&lt;/span&gt;Java&lt;span style="font-family: 宋体"&gt;和数据库三个东东一打包，然后说这就是一个企业应用下的业务组件，有啥新意呢，不就是模块化开发嘛，一直一来大家都是就是这么搞的嘛，何必搞个怪名词来忽悠。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体"&gt;是的，就是把&lt;/span&gt;UI&lt;span style="font-family: 宋体"&gt;、&lt;/span&gt;Java&lt;span style="font-family: 宋体"&gt;和数据库三个东东整合在一起，组件容器说提到的技术框架很多的开发队伍都有一套，运行容器更是有无数开源商业的，打包部署工具更是写了无数。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;这确确实实就是我们常说的模块化开发。但是模块化开发不同于组件开发，模块化开发只是在逻辑上做了切分，物理上（开发出的系统代码）通常并没有真正意义上的隔离，一切都只是在文档中。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;我们需要一点干货，只有实实在在的组件框架才能组件化开发真正落地的（如同&lt;/span&gt;OSGi&lt;span style="font-family: 宋体"&gt;框架那样）：我们需要一个类似于&lt;/span&gt;Equinox&lt;span style="font-family: 宋体"&gt;的界面扩展框架来支持&lt;/span&gt;UI&lt;span style="font-family: 宋体"&gt;资源的依赖和联动；我们需要一个集成框架来支持应用程序的依赖和联动，解决所面临的种种问题（业务不匹配、&lt;/span&gt;SPI&lt;span style="font-family: 宋体"&gt;集成以及各种非功能性需求）；我们需要一个打包部署工具（类似&lt;/span&gt;Spring DM&lt;span style="font-family: 宋体"&gt;）提供部署&lt;/span&gt;UI&lt;span style="font-family: 宋体"&gt;资源、应用程序和数据库定义资源（&lt;/span&gt;Spring DM&lt;span style="font-family: 宋体"&gt;提供了基于&lt;/span&gt;Web&lt;span style="font-family: 宋体"&gt;资源的部署能力）。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;其它问题&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;对于采用&lt;/span&gt;J2EE&lt;span style="font-family: 宋体"&gt;下&lt;/span&gt;B/S&lt;span style="font-family: 宋体"&gt;环境的组件应用还面临一个问题，即现有&lt;/span&gt;Servlet&lt;span style="font-family: 宋体"&gt;规范只允许一个&lt;/span&gt;web.xml&lt;span style="font-family: 宋体"&gt;，不支持组件各自定义私有的&lt;/span&gt;Filter&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;Servlet&lt;span style="font-family: 宋体"&gt;，不过这个问题不是很严重，在现有技术框架已经支持一份简单的&lt;/span&gt;web.xml&lt;span style="font-family: 宋体"&gt;，而新的&lt;/span&gt;Servlet&lt;span style="font-family: 宋体"&gt;规范已经允许多个&lt;/span&gt;web.xml&lt;span style="font-family: 宋体"&gt;。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;分布式部署以及集群部署问题，这其实不是个问题。基于应用的我们有很多手段和技术，那么基于组件的也一样有办法。&lt;/span&gt; &lt;/p&gt;&lt;img src="http://www.cnblogs.com/yimlin/aggbug/1670499.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yimlin/archive/2010/02/21/1670499.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yimlin/archive/2009/05/07/1452251.html</id><title type="text">浅谈领域驱动设计</title><summary type="text">简要总结了一下领域驱动设计的需求背景，支持技术，当前不足以及相应的技术分析</summary><published>2009-05-07T14:27:00Z</published><updated>2009-05-07T14:27:00Z</updated><author><name>Anders小明</name><uri>http://www.cnblogs.com/yimlin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimlin/archive/2009/05/07/1452251.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimlin/archive/2009/05/07/1452251.html"/></entry><entry><id>http://www.cnblogs.com/yimlin/archive/2009/05/06/1450341.html</id><title type="text">浅谈基础平台</title><summary type="text">简要讨论了基础平台的定义、必要性、评价指标及其构建等5个问题</summary><published>2009-05-05T23:57:00Z</published><updated>2009-05-05T23:57:00Z</updated><author><name>Anders小明</name><uri>http://www.cnblogs.com/yimlin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimlin/archive/2009/05/06/1450341.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimlin/archive/2009/05/06/1450341.html"/></entry><entry><id>http://www.cnblogs.com/yimlin/archive/2009/05/06/1450323.html</id><title type="text">浅谈企业应用架构（二）</title><summary type="text">简要讨论了基础平台的定义、必要性、评价指标及其构建等5个问题</summary><published>2009-05-05T17:25:00Z</published><updated>2009-05-05T17:25:00Z</updated><author><name>Anders小明</name><uri>http://www.cnblogs.com/yimlin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimlin/archive/2009/05/06/1450323.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimlin/archive/2009/05/06/1450323.html"/></entry><entry><id>http://www.cnblogs.com/yimlin/archive/2009/05/05/1450303.html</id><title type="text">浅谈企业应用架构（一）</title><summary type="text">这是关于企业应用架构的总结，分别从架构的定义和分类、目标和愿景，评价指标、原则和方法论、技术层面以及展示6个部分阐释我所理解的架构。共分为两个部分。第一部分包括架构的定义和分类、目标和愿景，评价指标以及原则和方法论；第二部分包括技术层面以及展示。</summary><published>2009-05-05T15:22:00Z</published><updated>2009-05-05T15:22:00Z</updated><author><name>Anders小明</name><uri>http://www.cnblogs.com/yimlin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimlin/archive/2009/05/05/1450303.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimlin/archive/2009/05/05/1450303.html"/></entry><entry><id>http://www.cnblogs.com/yimlin/archive/2008/03/26/1123738.html</id><title type="text">技术书籍推荐</title><summary type="text">dudu发起图书推荐活动，我整理这些年看的书，去除了经济学类的，对技术类书籍做了一些减法，以下是我认为不能再精减的书，特此向大家推荐：&#xD;</summary><published>2008-03-26T13:57:00Z</published><updated>2008-03-26T13:57:00Z</updated><author><name>Anders小明</name><uri>http://www.cnblogs.com/yimlin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimlin/archive/2008/03/26/1123738.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimlin/archive/2008/03/26/1123738.html"/></entry><entry><id>http://www.cnblogs.com/yimlin/archive/2008/01/12/1036486.html</id><title type="text">AOSD的实践冲动——Use Case的实现</title><summary type="text">讨论一下AOSD的实践冲动，以及AOP是所做的工作实质。</summary><published>2008-01-12T13:39:00Z</published><updated>2008-01-12T13:39:00Z</updated><author><name>Anders小明</name><uri>http://www.cnblogs.com/yimlin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimlin/archive/2008/01/12/1036486.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimlin/archive/2008/01/12/1036486.html"/></entry><entry><id>http://www.cnblogs.com/yimlin/archive/2008/01/08/1031063.html</id><title type="text">业务流程的层次和内容</title><summary type="text">业务流程的几个层次，及其关注内容</summary><published>2008-01-08T14:19:00Z</published><updated>2008-01-08T14:19:00Z</updated><author><name>Anders小明</name><uri>http://www.cnblogs.com/yimlin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimlin/archive/2008/01/08/1031063.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimlin/archive/2008/01/08/1031063.html"/></entry></feed>
