<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OnlyLonely &#38; Marshall's &#187; 转载</title>
	<atom:link href="http://www.onlymarshall.com/category/post-elsewhere/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.onlymarshall.com</link>
	<description>小白和小黑</description>
	<lastBuildDate>Mon, 23 Apr 2012 15:58:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>体系结构zz</title>
		<link>http://www.onlymarshall.com/2006/06/24/%e4%bd%93%e7%b3%bb%e7%bb%93%e6%9e%84/</link>
		<comments>http://www.onlymarshall.com/2006/06/24/%e4%bd%93%e7%b3%bb%e7%bb%93%e6%9e%84/#comments</comments>
		<pubDate>Sat, 24 Jun 2006 19:51:00 +0000</pubDate>
		<dc:creator>marshall</dc:creator>
				<category><![CDATA[csdn导入]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[转载]]></category>
		<category><![CDATA[架构]]></category>

		<guid isPermaLink="false">http://www.onlymarshall.com/?p=54</guid>
		<description><![CDATA[体系结构包括一组部件以及部件之间的联系。 体系结构风格有9大类：1. 数据流系统，包括顺序批处理、管道和过滤器；2. 调用－返回系统，包括主程序和子程序、面向对象系统、层次结构；3. 独立部件，包括通信进程、事件隐式调用；4. 虚拟机，包括解释器、规则基系统；5. 以数据为中心的系统（库），包括数据库、超文本系统、黑板系统；6. 特殊领域风格；例如过程控制、模拟器；7. 特殊结构的风格，例如分布式处理、状态转移系统；8. 不同风格合成建立的异构结构；9. 最初始、最基本的主程序/子程序。 自1964年G. AMDAhl首次提出体系结构这个概念，人们对计算机系统开始有了统一而清晰的认识，为从此以后计算机系统的设计与开发奠定了良好的基础。近四十年来, 体系结构学科得到了长足的发展, 其内涵和外延得到了极大的丰富。特别是网络计算技术的发展，使得网络计算体系结构成为当今一种主要的计算模式结构。微电子技术的飞速发展使芯片级体系结构研究成为一个挑战性课题。体系结构与系统软件，应用软件，程序设计语言的紧密结合与相互作用也使今天的计算机与以往有很大的不同，并触发了大量的前沿技术、相关产品开发与基础研究课题。 在传统的程序设计领域中，人们使用流程图来表达系统的基本功能和实现的具体逻辑，但是，流程图实际上仅仅是源程序的图形化表示，无法给系统的分析和开发者提供更多的信息，所以没有在实际的系统开发过程中得到广泛的应用。随着软件系统的规模和复杂性的增加，对软件系统的整体结构（数据和控制的逻辑）进行分析和描述成为大型系统开发的一个不可缺少的重要部分，显然，使用流程图是无法达到这个目标的，我们必须使用新的方法和概念来对系统的整体结构进行把握。 系统分析实际上包括两个阶段的工作，首先是需求的 分析，也就是说，划分出系统和环境之间的界面，将所研究（或者是将要开发）的系统和周围的环境分离，这就是从使用者的观点，将整个系统作为一个整体来考 察。其次是系统的设计，根据系统的整体功能和数据，参考实际的物理系统或者类似的系统，设计实际运行的软件系统，这一步骤实际上就是体系结构的分析和确 定。 从系统工程的观点看来，任何复杂的系统都是由相对简单的，在当前所分析的系统层次是原始的基本元素（虽然在更进一步的分析中，这些元素可能具有非常复杂的 内部结构）组成的，这些基本元素之间存在复杂的相互作用。所以，软件系统的分析和设计的基本任务是：确立系统中的基本元素（完成系统的功能所必不可少的成 分）；确定这些元素之间相互作用的方式（这就是系统的体系结构）。 我们在这里简单的介绍几种最基本的体系结构的范式，他们的特点、优点和缺点，最后给出实际开发中如何选择体系结构范式的一些指导性的意见。 一、基本的体系结构的范式 1. 管道和过滤器： 每个组件具有输入和输出的集合，从流中读出数据作为输入，产生输出数据的流。整个系统可以看成多个过滤器复合形成的数据处理组件。 过滤器A 过滤器B 过滤器C 过滤器A 过滤器D 管道 管道 特点： l 过滤器之间是相互独立的（不能共享状态），其中一个过滤器的操作和行为不能影响另外过滤器的操作和行为，流的传送没有副作用。 l 过滤器对所输入流的来源和输出流的去向不关心，不需要知道流的来源和流的去向，来源和去向对于过滤器的数据处理没有任何影响。 l 过滤和流的传送可以是并发的，可以同时有多个流的传送存在于系统之中。 实例： 一个最著名的实例是unix的shell编程，多个对数据进行处理的程序（组件）通过管道联结起来，产生总和的效果；还有传统的编译器，源代码经过词法分析、语法分析、中间代码生成、目标代码生成等步骤生成输出的目标代码。 优点： l 整个系统的功能是多个过滤器作用的总和，这样可以简化系统的分析和设计，可以经过需求的分析之后将整个系统作为一个过滤器处理，然后再逐步的细化成为多个相互连接的过滤器。 l 支持组件的重用，同一个过滤器可以多次出现在系统的不同位置。 l 易于维护和增强，过滤器可以被替换，可以增加新的过滤器到系统中而不改变原有的过滤器，不改变原来系统的基本功能。 l 本质上的并发性支持，这种体系结构由于本质上是与各个独立的过滤器的状态无关的，与并行的流的通过次序也是无关的，所以并发是一个基本的体系结构自然具有的特性。 缺点： l [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: Verdana;"><span style="font-family: Verdana;"><a href="http://www.itisedu.com/phrase/200603122156385.html" target="_new">体系结构</a>包括一组部件以及部件之间的联系。</span><span style="font-family: Verdana;"> 体系结构风格有9大<a href="http://www.itisedu.com/phrase/200603090857555.html" target="_new">类</a>：1. 数据流系统，包括顺序批处理、管道和过滤器；2. 调用－返回系统，包括主<a href="http://www.itisedu.com/phrase/200604232224305.html" target="_new">程序</a>和子程序、<a href="http://www.itisedu.com/phrase/200603101726185.html" target="_new">面向对象</a>系统、层次结构；3. 独立部件，包括通信进程、事件隐式调用；4. 虚拟机，包括解释器、规则基系统；5. 以数据为中心的系统（库），包括<a href="http://www.itisedu.com/phrase/200602271218062.html" target="_new">数据库</a>、超文本系统、黑板系统；6. 特殊领域风格；例如过程控制、模拟器；7. 特殊结构的风格，例如分布式处理、状态转移系统；8. 不同风格合成建立的异构结构；9. 最初始、最基本的主程序/子程序。</span></p>
<p><span style="font-family: Verdana;"> 自1964年G. A<a href="http://www.itisedu.com/phrase/200603051312555.html" target="_new">MDA</a>hl首次提出体系结构这个概念，人们对<a href="http://www.itisedu.com/phrase/200603021438435.html" target="_new">计算机</a>系统开始有了统一而清晰的认识，为从此以后计算机系统的设计与开发奠定了良好的基础。近四十年来, 体系结构学科得到了长足的发展, 其内涵和外延得到了极大的丰富。特别是网络计算技术的发展，使得网络计算体系结构成为当今一种主要的计算<a href="http://www.itisedu.com/phrase/200603061709535.html" target="_new">模式</a>结构。微电子技术的飞速发展使芯片级体系结构研究成为一个挑战性课题。体系结构与系统<a href="http://www.itisedu.com/phrase/200604232134205.html" target="_new">软件</a>，应用软件，<a href="http://www.itisedu.com/phrase/200602281700255.html" target="_new">程序设计语言</a>的紧密结合与相互作用也使今天的计算机与以往有很大的不同，并触发了大量的前沿技术、相关产品开发与基础研究课题。</span></p>
<p><span style="font-family: Verdana;"> 在传统的<a href="http://www.itisedu.com/phrase/200602281641255.html" target="_new">程序设计</a>领域中，人们使用流程图来表达系统的基本功能和实现的具体逻辑，但是，流程图实际上仅仅是源程序的图形化表示，无法给系统的分析和开发者提供更多的信息，所以没有在实际的系统开发过程中得到广泛的应用。随着<a href="http://www.itisedu.com/phrase/200602281706245.html" target="_new">软件系统</a>的规模和复杂性的增加，对软件系统的整体结构（数据和控制的逻辑）进行分析和描述成为大型系统开发的一个不可缺少的重要部分，显然，使用流程图是无法达到这个目标的，我们必须使用新的方法和概念来对系统的整体结构进行把握。</span></p>
<p><span style="font-family: Verdana;"> 系统分析实际上包括两个阶段的工作，首先是<a href="http://www.itisedu.com/phrase/200603101518295.html" target="_new">需求</a>的 分析，也就是说，划分出系统和环境之间的界面，将所研究（或者是将要开发）的系统和周围的环境分离，这就是从使用者的观点，将整个系统作为一个整体来考 察。其次是系统的设计，根据系统的整体功能和数据，参考实际的物理系统或者类似的系统，设计实际运行的软件系统，这一步骤实际上就是体系结构的分析和确 定。</span></p>
<p><span style="font-family: Verdana;"> 从系统工程的观点看来，任何复杂的系统都是由相对简单的，在当前所分析的系统层次是原始的基本元素（虽然在更进一步的分析中，这些元素可能具有非常复杂的 内部结构）组成的，这些基本元素之间存在复杂的相互作用。所以，软件系统的分析和设计的基本任务是：确立系统中的基本元素（完成系统的功能所必不可少的成 分）；确定这些元素之间相互作用的方式（这就是系统的体系结构）。</span></p>
<p><span style="font-family: Verdana;"> 我们在这里简单的介绍几种最基本的体系结构的<a href="http://www.itisedu.com/phrase/200604241409355.html" target="_new">范式</a>，他们的特点、优点和缺点，最后给出实际开发中如何选择体系结构范式的一些指导性的意见。</span></p>
<p><span style="font-family: Verdana;"><strong>一、基本的体系结构的范式</strong></span></p>
<p><span style="font-family: Verdana;">1. 管道和过滤器：</span></p>
<p><span style="font-family: Verdana;"> 每个<a href="http://www.itisedu.com/phrase/200603302222545.html" target="_new">组件</a>具有输入和输出的集合，从流中读出数据作为输入，产生输出数据的流。整个系统可以看成多个过滤器复合形成的数据处理组件。</span></p>
<p><span style="font-family: Verdana;"><br />
过滤器A</p>
<p>过滤器B</p>
<p>过滤器C</p>
<p>过滤器A</p>
<p>过滤器D</p>
<p>管道</p>
<p>管道</span></p>
<p><span style="font-family: Verdana;"> 特点：</span></p>
<p><span style="font-family: Verdana;"> l 过滤器之间是相互独立的（不能共享状态），其中一个过滤器的操作和行为不能影响另外过滤器的操作和行为，流的传送没有副作用。</span></p>
<p><span style="font-family: Verdana;"> l 过滤器对所输入流的来源和输出流的去向不关心，不需要知道流的来源和流的去向，来源和去向对于过滤器的数据处理没有任何影响。</span></p>
<p><span style="font-family: Verdana;"> l 过滤和流的传送可以是并发的，可以同时有多个流的传送存在于系统之中。</span></p>
<p><span style="font-family: Verdana;"> 实例：</span></p>
<p><span style="font-family: Verdana;"> 一个最著名的实例是unix的shell编程，多个对数据进行处理的程序（组件）通过管道联结起来，产生总和的效果；还有传统的编译器，源代码经过词法分析、语法分析、中间代码生成、目标代码生成等步骤生成输出的目标代码。</span></p>
<p><span style="font-family: Verdana;"> 优点：</span></p>
<p><span style="font-family: Verdana;"> l 整个系统的功能是多个过滤器作用的总和，这样可以简化系统的分析和设计，可以经过需求的分析之后将整个系统作为一个过滤器处理，然后再逐步的细化成为多个相互连接的过滤器。</span></p>
<p><span style="font-family: Verdana;"> l 支持组件的重用，同一个过滤器可以多次出现在系统的不同位置。</span></p>
<p><span style="font-family: Verdana;"> l 易于维护和增强，过滤器可以被替换，可以增加新的过滤器到系统中而不改变原有的过滤器，不改变原来系统的基本功能。</span></p>
<p><span style="font-family: Verdana;"> l 本质上的并发性支持，这种体系结构由于本质上是与各个独立的过滤器的状态无关的，与并行的流的通过次序也是无关的，所以并发是一个基本的体系结构自然具有的特性。</span></p>
<p><span style="font-family: Verdana;"> 缺点：</span></p>
<p><span style="font-family: Verdana;"> l 由于过滤器之间本质上是独立的，所以设计者必须独立考虑每一个过滤器的输入、处理和输出的过程，对于过滤器逻辑上的共同点和相互关系无法在设计中加以体现。</span></p>
<p><span style="font-family: Verdana;"> l 由于这种体系的批处理特性，所以不适合开发和用户交互的应用程序。</span></p>
<p><span style="font-family: Verdana;"> l 系统的多个处理流之间的共同特性无法提取、多个过滤器之间的共同特性也无法提取，所以增加了设计的复杂性。</span></p>
<p><span style="font-family: Verdana;"><br />
2. 数据抽象和面向<a href="http://www.itisedu.com/phrase/200603090845215.html" target="_new">对象</a>的体系</span></p>
<p><span style="font-family: Verdana;"> 在这种体系中，数据和数据上的操作被封装成抽象数据<a href="http://www.itisedu.com/phrase/200603051002565.html" target="_new">类型</a>或者对象。系统由大量的对象组成，在物理上，对象之间通过函数或者过程调用相互作用；在逻辑上，对象之间通过集成、复合等方式实现设计的复用。</span></p>
<p><span style="font-family: Verdana;">对象D</p>
<p>对象B</p>
<p>对象A</p>
<p>对象E</p>
<p>对象C</p>
<p>对象调用</p>
<p>对象调用</p>
<p>对象调用</p>
<p>类A</p>
<p>类B</p>
<p>类C</p>
<p>类G</p>
<p>对象A</p>
<p>对象E</p>
<p>类F</p>
<p>复合</p>
<p>继承<br />
</span></p>
<p><span style="font-family: Verdana;"> 物理结构 逻辑结构</span></p>
<p><span style="font-family: Verdana;"> 特点：</span></p>
<p><span style="font-family: Verdana;"> 面向对象系统分析和设计的资料已经太多，这里就不再详细说明了。</span></p>
<p><span style="font-family: Verdana;"> 优点：</span></p>
<p><span style="font-family: Verdana;"> 由于封装，实现了灵活性和扩充性，隐藏了实现的细节，提高代码的质量；</span></p>
<p><span style="font-family: Verdana;"> 使用继承和多态、提高了软件的可重用性。</span></p>
<p><span style="font-family: Verdana;"> 缺点：</span></p>
<p><span style="font-family: Verdana;"> 最主要的缺点是，由于对象之间的交互是通过明确的对象函数调用进行的，所以当一个对象需要实现一个特定功能的时候，必须知道哪一个对象提供这种服务，这就降低了系统的灵活性。管道和过滤器模型不需要明确指明数据的来源和去向。</span></p>
<p><span style="font-family: Verdana;">3. 事件驱动的体系</span></p>
<p><span style="font-family: Verdana;">对象E</p>
<p>对象E</p>
<p>对象E</p>
<p>事件分发的总线</p>
<p>事件的创建</p>
<p>事件接收者的注册的创建</p>
<p>对象E</p>
<p>这是面向对象和数据抽象体系的一种变形，系统同样是由大量的对象组成的，但是对象之间的交互不是通过明确指明对象的函数或者过程调用进行的，相反，系统提 供事件的创建和发布的机制，对象产生事件，一个或者多个对象通过向系统注册关注这个事件并由此触发出相应的行为或者产生新的事件。</span></p>
<p><span style="font-family: Verdana;"> 实例：</span></p>
<p><span style="font-family: Verdana;"> 一个最著名的例子是GUI的模型，鼠标、键盘或者其他输入设备产生各种事件，窗口、程序或者其他对象有这些事件所触发，产生新的事件、进行数据处理或者其他操作。</span></p>
<p><span style="font-family: Verdana;"> 优点：</span></p>
<p><span style="font-family: Verdana;"> 用于函数和过程的调用调用不需要指明特定的对象，所以系统具有非常好的灵活性和扩展性，新的组件只需要向系统的事件处理部分注册就可以立刻加入系统中，同 样，老的组件也可以方便的从系统中删除。对于动态性要求特别高的系统，特别是如果需要在运行时对系统进行扩充，应该采用该结构。</span></p>
<p><span style="font-family: Verdana;"> 缺点：</span></p>
<p><span style="font-family: Verdana;"> 由于函数调用是通过事件发送进行的，所以，发出事件的对象不能确认是否有对象处理了这个事件、是否是期望的对象处理了这个事件、是否获得期望的结果，同样也无法控制事件发生的次序，系统的逻辑和时序的正确性必须通过复杂的时序逻辑和前后条件的断言加以保证。</span></p>
<p><span style="font-family: Verdana;">4. <a href="http://www.itisedu.com/phrase/200604161254415.html" target="_new">分层</a>次的体系</span></p>
<p><span style="font-family: Verdana;"> 将系统功能和组件分成不同的功能层次，一般而言，只有最上层的组件和功能可以被系统外的使用者访问，只有相邻的层次之间才能够有函数调用。</span></p>
<p><span style="font-family: Verdana;"> 下面是一个基本的商务处理系统的层次结构：</span></p>
<p><span style="font-family: Verdana;"><br />
<a href="http://www.itisedu.com/phrase/200604241148495.html" target="_new">用户界面层</a></p>
<p>事务逻辑层</p>
<p>核心层</p>
<p>实例：</span></p>
<p><span style="font-family: Verdana;"> 显然，ISO的<a href="http://www.itisedu.com/phrase/200604232131175.html" target="_new">OS</a>I（开放系统互连）参考模型是最著名的层次模型的例子，通过将开放系统的功能和组件划分成7个层次，定义清晰的（很多时候是过于复杂的）层次之间的接口，实现复杂的互操作性。</span></p>
<p><span style="font-family: Verdana;"> 优点：</span></p>
<p><span style="font-family: Verdana;"> l 系统的开发和设计可以逐步的分层次的进行，从底层的简单的功能逐步建立高层的复杂和抽象的功能。</span></p>
<p><span style="font-family: Verdana;"> l 灵活性和扩展性，由于相邻层次之间通过清晰的接口交互，所以特定的层次可以被替换和增强，甚至可以增加新的层次。</span></p>
<p><span style="font-family: Verdana;"> 缺点：</span></p>
<p><span style="font-family: Verdana;"> l 不是所有的系统都可以分解成为清楚的层次</span></p>
<p><span style="font-family: Verdana;"> l 划分清晰、逻辑上一致的层次是非常困难的（OSI的失败和TCP/IP的成功说明了这一点）</span></p>
<p><span style="font-family: Verdana;"> l 严格的层次调用结构会降低系统的性能。</span></p>
<p><span style="font-family: Verdana;">5. <a href="http://www.itisedu.com/phrase/200603011826385.html" target="_new">知识库</a>体系</span></p>
<p><span style="font-family: Verdana;"> 使用一个中心数据结构表示系统的当前状态，一组相互独立的组件在中心数据库上进行操作。如果组件负责对中心数据进行选择、处理，这种体系就是传统的数据库模型；如果中心数据结构自主的引发一系列的行为，则这种体系可以看成一个黑板模型。</span></p>
<p><span style="font-family: Verdana;">中心数据库（知识库）</p>
<p>客户组件A</p>
<p>客户组件B</p>
<p>客户组件C</p>
<p>实例：</span></p>
<p><span style="font-family: Verdana;"> 大量的传统数据库应用程序实际上就是这一体系的具体实例。在很多研究系统中，使用的基于知识库的黑板模型，实际上也是这种体系</span></p>
<p><span style="font-family: Verdana;"> 优点：</span></p>
<p><span style="font-family: Verdana;"> 以数据为中心的体系结构，可以自然的表示大量的数据和事务处理的逻辑，适合表达以数据为重新的应用程序。</span></p>
<p><span style="font-family: Verdana;"> 缺点：</span></p>
<p><span style="font-family: Verdana;"> 只有很少一部分简单的数据库存储应用可以完全采用这种体系结构表示，在大量实际的商业应用中，完成师傅处理和其他逻辑的应用程序必须采用其他的体系结构表达</span></p>
<p><span style="font-family: Verdana;">6. 解释器体系</span></p>
<p><span style="font-family: Verdana;"><br />
用户</p>
<p>如果应用程序的逻辑非常复杂，例如，AutoCAD的各种绘图指令，而且，用户可能以非常复杂的方式使用这个系统，一个较好的体系就是提供面向领域的一组指令（语言），系统解释这种语言，产生相应的行为，用户使用这种指令（语言）完成复杂的操作。</span></p>
<p><span style="font-family: Verdana;"><br />
使用虚拟机语言描述的业务逻辑</p>
<p>虚拟机解释器</p>
<p>完成实际操作任务的基本指令</p>
<p>实际的问题领域</p>
<p>实例：</span></p>
<p><span style="font-family: Verdana;"> 大量的开发工具、二次开发工具体现了这一思想：微软在其产品中大量使用的Visual B<a href="http://www.itisedu.com/phrase/200604232104015.html" target="_new">AS</a>ic for Application，以及在AutoD<a href="http://www.itisedu.com/phrase/200604231411155.html" target="_new">ES</a>k产品中大量使用的AutoLisp语言，实际上就是给用户提供了一种面向领域的语言，然后核心解释执行这一语言的指令和指令序列。从而扩充产品的功能，方便用户按照自己的需要定制系统。</span></p>
<p><span style="font-family: Verdana;"> 优点：</span></p>
<p><span style="font-family: Verdana;"> 非常好的扩展性，用户可以实现对软件系统的二次开发</span></p>
<p><span style="font-family: Verdana;"> 缺点：</span></p>
<p><span style="font-family: Verdana;"> <a href="http://www.itisedu.com/phrase/200603282233345.html" target="_new">软件开发</a>复杂，特别是这种指令集的设计非常困难。</span></p>
<p><span style="font-family: Verdana;"> 是否可以采用一种成熟的语言作为二次开发的基础（例如，基于Java）</span></p>
<p><span style="font-family: Verdana;"><strong>二、实际系统开发的观点</strong></span></p>
<p><span style="font-family: Verdana;"> 在实际开发过程中，简单的判断某一个具体的应用应该采取何种体系结构是非常困难的。从目前的趋势来看：简单的管道、过滤器体系已经非常少见，面向对象的思 想已经融合在几乎所有的体系结构之中，而层次化的思想同样也被广泛使用，所以，一个基本的系统分析方法应该是功能和复杂性的分解，也就是说，从横向分解 （分模块、<a href="http://www.itisedu.com/phrase/200604161433025.html" target="_new">子系统</a>），纵向分解中得到系统的基本组件（分类、分层次的功能和对象）。然后根据问题领域的特性选择系统的行为模式（具体的体系结构）。</span></p>
<p><span style="font-family: Verdana;"><strong>三、目前最常见的体系结构</strong></span></p>
<p><span style="font-family: Verdana;"> l 严格的层次结构（系统可以清楚的分解成为不同的功能层次，例如基本的图形库，提供不同层次的绘图接口）</span></p>
<p><span style="font-family: Verdana;"> 这种体系结构适合于系统的功能相对简单，并且可以按照复杂的程度、抽象的程度、和硬件平台的关系等方面的特性加以分层的软件中。</span></p>
<p><span style="font-family: Verdana;"> l 事件驱动的体系：</span></p>
<p><span style="font-family: Verdana;"> 对互操作性、特别是异构环境下的互操作性要求非常高的情况下，可以采用这种体系，当整个系统中存在大量的并发的，相互之间没有逻辑联系的组件的时候（例如<a href="http://www.itisedu.com/phrase/200602281634075.html" target="_new">操作系统</a>或者图形用户界面）可以使用这种体系结构。现代软件技术中微软的COM和ISO的<a href="http://www.itisedu.com/phrase/200604031336425.html" target="_new">CORBA</a>实际上都是这种体系结构的例子。</span></p>
<p><span style="font-family: Verdana;"> l 知识库的体系：</span></p>
<p><span style="font-family: Verdana;"> 以大量数据为核心的系统采用这种体系，一些<a href="http://www.itisedu.com/phrase/200603011759495.html" target="_new">人工智能</a>的应用同样需要这种体系结构，面向对象的知识库是这种体系结构的一个发展方向。将面向对象和层次化的思想引入知识库系统中，将得到一种非常强大的体系结构。</span></p>
<p><span style="font-family: Verdana;"> l 基于解释器的体系：</span></p>
<p><span style="font-family: Verdana;"> 如果应用系统和用户的交互非常复杂，采用这种体系结构是最适合的方案，只有将系统的基本操作以指令的形式提供给用户，同时，提供一种简单明了的语法和基本 的数据操作、处理的功能，才能得到功能最强大、最灵活、具有最佳扩充新的应用系统；一个非常合适的例子是浏览器，一开始，浏览器只是简单的下载和显示 HTML的页面，随着用户对界面交互要求的发展，开发出javas<a href="http://www.itisedu.com/phrase/200604241354455.html" target="_new">CR</a>ipt，提供一种语言和基本的界面元素操纵的指令来得到扩充性和强大的功能。</span></p>
<p><span style="font-family: Verdana;"> 绝大多数实际运行的系统都是上面几种体系结构的复合：在系统的某些部分采用一种体系结构而在其他的部分采用另外的体系，我们可以将复合几种基本体系结构的 系统称作复合体系结构。在实际的系统分析和设计中，可能首先将整个系统作为一个功能体进行分析和权衡，得到适宜的、最上层的体系结构，如果该体系结构中的 元素较为复杂，可以继续进行分解，得到某一部分的，局部的体系。分析的层次应该在可以清晰的使用简单的功能和界面描述表达结束，这样，可以将我们在分析和 设计的这一阶段将焦点集中在系统的总体结构上，而避免引入和所使用的语言、实现所具体需要的技术等实现的细节上。</span></p>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.onlymarshall.com/2006/06/24/%e4%bd%93%e7%b3%bb%e7%bb%93%e6%9e%84/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>体系结构风格分类zz</title>
		<link>http://www.onlymarshall.com/2006/06/24/%e4%bd%93%e7%b3%bb%e7%bb%93%e6%9e%84%e9%a3%8e%e6%a0%bc%e5%88%86%e7%b1%bb/</link>
		<comments>http://www.onlymarshall.com/2006/06/24/%e4%bd%93%e7%b3%bb%e7%bb%93%e6%9e%84%e9%a3%8e%e6%a0%bc%e5%88%86%e7%b1%bb/#comments</comments>
		<pubDate>Sat, 24 Jun 2006 19:46:00 +0000</pubDate>
		<dc:creator>marshall</dc:creator>
				<category><![CDATA[csdn导入]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[转载]]></category>
		<category><![CDATA[架构]]></category>

		<guid isPermaLink="false">http://www.onlymarshall.com/?p=55</guid>
		<description><![CDATA[软件体系结构设计的一个核心问题是能否使用重复的体系结构模式，即能否达到体系结构级的软件重用。也就是说，能否在不同的软件系统中，使用同一体系结构。基于这个目的，学者们开始研究和实践软件体系结构的风格和类型问题。 软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。它反映了领域中众多系统所共有的结构和语义特性，并指导如何将各个模块和子系统有效地组织成一个完整的系统。按这种方式理解，软件体系结构风格定义了用于描述系统的术语表和一组指导构件系统的规则。 对软件体系结构风格的研究和实践促进了对设计的复用，一些经过实践证实的解决方案也可以可靠地用于解决新的问题。体系结构风格的不变部分使不同的系统可 以共享同一个实现代码。只要系统是使用常用的、规范的方法来组织，就可使别的设计者很容易地理解系统的体系结构。例如，如果某人把系统描述为&#8221;客户／服务 器&#8221;模式，则不必给出设计细节，我们立刻就会明白系统是如何组织和工作的。 下面是Garlan和Shaw对通用体系结构风格的分类： （1）数据流风格：批处理序列；管道/过滤器 （2）调用/返回风格：主程序/子程序；面向对象风格；层次结构 （3）独立构件风格：进程通讯；事件系统 （4）虚拟机风格：解释器；基于规则的系统 （5）仓库风格：数据库系统；超文本系统；黑板系统 在上两篇文章中，我们介绍了软件体系结构的概念、现状及发展方向，读者可能会觉得&#8221;软件体系结构太抽象、太理论化，没有什么实际的东西&#8221;。然而，任何实践都必须接受理论的指导，如果抛弃理论基础，一味地追求实用，那也只能是囫囵吞枣。 软件体系结构设计的一个核心问题是能否使用重复的体系结构模式，即能否达到体系结构级的软件重用。也就是说，能否在不同的软件系统中，使用同一体系结构。基于这个目的，学者们开始研究和实践软件体系结构的风格和类型问题。 软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。它反映了领域中众多系统所共有的结构和语义特性，并指导如何将各个模块和子系统有效地组织成一个完整的系统。按这种方式理解，软件体系结构风格定义了用于描述系统的术语表和一组指导构件系统的规则。 对软件体系结构风格的研究和实践促进了对设计的复用，一些经过实践证实的解决方案也可以可靠地用于解决新的问题。体系结构风格的不变部分使不同的系统可 以共享同一个实现代码。只要系统是使用常用的、规范的方法来组织，就可使别的设计者很容易地理解系统的体系结构。例如，如果某人把系统描述为&#8221;客户／服务 器&#8221;模式，则不必给出设计细节，我们立刻就会明白系统是如何组织和工作的。 下面是Garlan和Shaw对通用体系结构风格的分类： （1）数据流风格：批处理序列；管道/过滤器 （2）调用/返回风格：主程序/子程序；面向对象风格；层次结构 （3）独立构件风格：进程通讯；事件系统 （4）虚拟机风格：解释器；基于规则的系统 （5）仓库风格：数据库系统；超文本系统；黑板系统 限于篇幅，在本文中，我们将只介绍几种主要的和经典的体系结构风格和它们的优缺点。有关新出现的软件体系结构风格，将在后续文章中进行介绍。 一、C2风格 C2体系结构风格可以概括为：通过连接件绑定在一起的按照一组规则运作的并行构件网络。C2风格中的系统组织规则如下： （1）系统中的构件和连接件都有一个顶部和一个底部； （2）构件的顶部应连接到某连接件的底部，构件的底部则应连接到某连接件的顶部，而构件与构件之间的直接连接是不允许的； （3）一个连接件可以和任意数目的其它构件和连接件连接； （4）当两个连接件进行直接连接时，必须由其中一个的底部到另一个的顶部。 图1是C2风格的示意图。图中构件与连接件之间的连接体现了C2风格中构建系统的规则。 图1 C2风格的体系结构 C2风格是最常用的一种软件体系结构风格。从C2风格的组织规则和结构图中，我们可以得出，C2风格具有以下特点： （1）系统中的构件可实现应用需求，并能将任意复杂度的功能封装在一起； （2）所有构件之间的通讯是通过以连接件为中介的异步消息交换机制来实现的； （3）构件相对独立，构件之间依赖性较少。系统中不存在某些构件将在同一地址空间内执行，或某些构件共享特定控制线程之类的相关性假设。 二、管道/过滤器风格 在管道/过滤器风格的软件体系结构中，每个构件都有一组输入和输出，构件读输入的数据流，经过内部处理，然后产生输出数据流。这个过程通常通过对输入流 的变换及增量计算来完成，所以在输入被完全消费之前，输出便产生了。因此，这里的构件被称为过滤器，这种风格的连接件就象是数据流传输的管道，将一个过滤 器的输出传到另一过滤器的输入。此风格特别重要的过滤器必须是独立的实体，它不能与其它的过滤器共享数据，而且一个过滤器不知道它上游和下游的标识。一个 管道/过滤器网络输出的正确性并不依赖于过滤器进行增量计算过程的顺序。 图2是管道/过滤器风格的示意图。一个典型的管道/ 过滤器体系结构的例子是以Unix shell编写的程序。Unix既提供一种符号，以连接各组成部分(Unix的进程)，又提供某种进程运行时机制以实 现管道。另一个著名的例子是传统的编译器。传统的编译器一直被认为是一种管道系统，在该系统中，一个阶段（包括词法分析、语法分析、语义分析和代码生成） 的输出是另一个阶段的输入。 图2 管道/过滤器风格的体系结构 管道/过滤器风格的软件体系结构具有许多很好的特点： （1）使得软构件具有良好的隐蔽性和高内聚、低耦合的特点； （2）允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成； （3）支持软件重用。重要提供适合在两个过滤器之间传送的数据，任何两个过滤器都可被连接起来； （4）系统维护和增强系统性能简单。新的过滤器可以添加到现有系统中来；旧的可以被改进的过滤器替换掉； （5）允许对一些如吞吐量、死锁等属性的分析； （6）支持并行执行。每个过滤器是作为一个单独的任务完成，因此可与其它任务并行执行。 但是，这样的系统也存在着若干不利因素。 （1）通常导致进程成为批处理的结构。这是因为虽然过滤器可增量式地处理数据，但它们是独立的，所以设计者必须将每个过滤器看成一个完整的从输入到输出的转换。 [...]]]></description>
			<content:encoded><![CDATA[<p>软件体系结构设计的一个核心问题是能否使用重复的体系结构模式，即能否达到体系结构级的软件重用。也就是说，能否在不同的软件系统中，使用同一体系结构。基于这个目的，学者们开始研究和实践软件体系结构的风格和类型问题。</p>
<p>软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。它反映了领域中众多系统所共有的结构和语义特性，并指导如何将各个模块和子系统有效地组织成一个完整的系统。按这种方式理解，软件体系结构风格定义了用于描述系统的术语表和一组指导构件系统的规则。</p>
<p>对软件体系结构风格的研究和实践促进了对设计的复用，一些经过实践证实的解决方案也可以可靠地用于解决新的问题。体系结构风格的不变部分使不同的系统可 以共享同一个实现代码。只要系统是使用常用的、规范的方法来组织，就可使别的设计者很容易地理解系统的体系结构。例如，如果某人把系统描述为&#8221;客户／服务 器&#8221;模式，则不必给出设计细节，我们立刻就会明白系统是如何组织和工作的。</p>
<p>下面是Garlan和Shaw对通用体系结构风格的分类：<br />
（1）数据流风格：批处理序列；管道/过滤器<br />
（2）调用/返回风格：主程序/子程序；面向对象风格；层次结构<br />
（3）独立构件风格：进程通讯；事件系统<br />
（4）虚拟机风格：解释器；基于规则的系统<br />
（5）仓库风格：数据库系统；超文本系统；黑板系统</p>
<p>在上两篇文章中，我们介绍了软件体系结构的概念、现状及发展方向，读者可能会觉得&#8221;软件体系结构太抽象、太理论化，没有什么实际的东西&#8221;。然而，任何实践都必须接受理论的指导，如果抛弃理论基础，一味地追求实用，那也只能是囫囵吞枣。</p>
<p>软件体系结构设计的一个核心问题是能否使用重复的体系结构模式，即能否达到体系结构级的软件重用。也就是说，能否在不同的软件系统中，使用同一体系结构。基于这个目的，学者们开始研究和实践软件体系结构的风格和类型问题。</p>
<p>软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。它反映了领域中众多系统所共有的结构和语义特性，并指导如何将各个模块和子系统有效地组织成一个完整的系统。按这种方式理解，软件体系结构风格定义了用于描述系统的术语表和一组指导构件系统的规则。</p>
<p>对软件体系结构风格的研究和实践促进了对设计的复用，一些经过实践证实的解决方案也可以可靠地用于解决新的问题。体系结构风格的不变部分使不同的系统可 以共享同一个实现代码。只要系统是使用常用的、规范的方法来组织，就可使别的设计者很容易地理解系统的体系结构。例如，如果某人把系统描述为&#8221;客户／服务 器&#8221;模式，则不必给出设计细节，我们立刻就会明白系统是如何组织和工作的。</p>
<p>下面是Garlan和Shaw对通用体系结构风格的分类：<br />
（1）数据流风格：批处理序列；管道/过滤器<br />
（2）调用/返回风格：主程序/子程序；面向对象风格；层次结构<br />
（3）独立构件风格：进程通讯；事件系统<br />
（4）虚拟机风格：解释器；基于规则的系统<br />
（5）仓库风格：数据库系统；超文本系统；黑板系统</p>
<p>限于篇幅，在本文中，我们将只介绍几种主要的和经典的体系结构风格和它们的优缺点。有关新出现的软件体系结构风格，将在后续文章中进行介绍。</p>
<p>一、C2风格</p>
<p>C2体系结构风格可以概括为：通过连接件绑定在一起的按照一组规则运作的并行构件网络。C2风格中的系统组织规则如下：</p>
<p>（1）系统中的构件和连接件都有一个顶部和一个底部；</p>
<p>（2）构件的顶部应连接到某连接件的底部，构件的底部则应连接到某连接件的顶部，而构件与构件之间的直接连接是不允许的；</p>
<p>（3）一个连接件可以和任意数目的其它构件和连接件连接；</p>
<p>（4）当两个连接件进行直接连接时，必须由其中一个的底部到另一个的顶部。</p>
<p>图1是C2风格的示意图。图中构件与连接件之间的连接体现了C2风格中构建系统的规则。</p>
<p>图1 C2风格的体系结构</p>
<p>C2风格是最常用的一种软件体系结构风格。从C2风格的组织规则和结构图中，我们可以得出，C2风格具有以下特点：</p>
<p>（1）系统中的构件可实现应用需求，并能将任意复杂度的功能封装在一起；</p>
<p>（2）所有构件之间的通讯是通过以连接件为中介的异步消息交换机制来实现的；</p>
<p>（3）构件相对独立，构件之间依赖性较少。系统中不存在某些构件将在同一地址空间内执行，或某些构件共享特定控制线程之类的相关性假设。</p>
<p>二、管道/过滤器风格</p>
<p>在管道/过滤器风格的软件体系结构中，每个构件都有一组输入和输出，构件读输入的数据流，经过内部处理，然后产生输出数据流。这个过程通常通过对输入流 的变换及增量计算来完成，所以在输入被完全消费之前，输出便产生了。因此，这里的构件被称为过滤器，这种风格的连接件就象是数据流传输的管道，将一个过滤 器的输出传到另一过滤器的输入。此风格特别重要的过滤器必须是独立的实体，它不能与其它的过滤器共享数据，而且一个过滤器不知道它上游和下游的标识。一个 管道/过滤器网络输出的正确性并不依赖于过滤器进行增量计算过程的顺序。</p>
<p>图2是管道/过滤器风格的示意图。一个典型的管道/ 过滤器体系结构的例子是以Unix shell编写的程序。Unix既提供一种符号，以连接各组成部分(Unix的进程)，又提供某种进程运行时机制以实 现管道。另一个著名的例子是传统的编译器。传统的编译器一直被认为是一种管道系统，在该系统中，一个阶段（包括词法分析、语法分析、语义分析和代码生成） 的输出是另一个阶段的输入。</p>
<p>图2 管道/过滤器风格的体系结构</p>
<p>管道/过滤器风格的软件体系结构具有许多很好的特点：</p>
<p>（1）使得软构件具有良好的隐蔽性和高内聚、低耦合的特点；</p>
<p>（2）允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成；</p>
<p>（3）支持软件重用。重要提供适合在两个过滤器之间传送的数据，任何两个过滤器都可被连接起来；</p>
<p>（4）系统维护和增强系统性能简单。新的过滤器可以添加到现有系统中来；旧的可以被改进的过滤器替换掉；</p>
<p>（5）允许对一些如吞吐量、死锁等属性的分析；</p>
<p>（6）支持并行执行。每个过滤器是作为一个单独的任务完成，因此可与其它任务并行执行。</p>
<p>但是，这样的系统也存在着若干不利因素。</p>
<p>（1）通常导致进程成为批处理的结构。这是因为虽然过滤器可增量式地处理数据，但它们是独立的，所以设计者必须将每个过滤器看成一个完整的从输入到输出的转换。</p>
<p>（2）不适合处理交互的应用。当需要增量地显示改变时，这个问题尤为严重。</p>
<p>（3）因为在数据传输上没有通用的标准，每个过滤器都增加了解析和合成数据的工作，这样就导致了系统性能下降，并增加了编写过滤器的复杂性。</p>
<p>三、数据抽象和面向对象风格</p>
<p>抽象数据类型概念对软件系统有着重要作用，目前软件界已普遍转向使用面向对象系统。这种风格建立在数据抽象和面向对象的基础上，数据的表示方法和它们的 相应操作封装在一个抽象数据类型或对象中。这种风格的构件是对象，或者说是抽象数据类型的实例。对象是一种被称作管理者的构件，因为它负责保持资源的完整 性。对象是通过函数和过程的调用来交互的。</p>
<p>图3是数据抽象和面向对象风格的示意图。</p>
<p>图3 数据抽象和面向对象风格的体系结构</p>
<p>面向对象的系统有许多的优点，并早已为人所知：</p>
<p>（1）因为对象对其它对象隐藏它的表示，所以可以改变一个对象的表示，而不影响其它的对象。</p>
<p>（2）设计者可将一些数据存取操作的问题分解成一些交互的代理程序的集合。</p>
<p>但是，面向对象的系统也存在着某些问题：</p>
<p>（1）为了使一个对象和另一个对象通过过程调用等进行交互，必须知道对象的标识。只要一个对象的标识改变了，就必须修改所有其他明确调用它的对象。</p>
<p>（2）必须修改所有显式调用它的其它对象，并消除由此带来的一些副作用。例如，如果A使用了对象B，C也使用了对象B，那么，C对B的使用所造成的对A的影响可能是料想不到的。</p>
<p>四、基于事件的隐式调用风格</p>
<p>基于事件的隐式调用风格的思想是构件不直接调用一个过程，而是触发或广播一个或多个事件。系统中的其它构件中的过程在一个或多个事件中注册，当一个事件被触发，系统自动调用在这个事件中注册的所有过程，这样，一个事件的触发就导致了另一模块中的过程的调用。</p>
<p>从体系结构上说，这种风格的构件是一些模块，这些模块既可以是一些过程，又可以是一些事件的集合。过程可以用通用的方式调用，也可以在系统事件中注册一些过程，当发生这些事件时，过程被调用。</p>
<p>基于事件的隐式调用风格的主要特点是事件的触发者并不知道哪些构件会被这些事件影响。这样不能假定构件的处理顺序，甚至不知道哪些过程会被调用，因此，许多隐式调用的系统也包含显式调用作为构件交互的补充形式。</p>
<p>支持基于事件的隐式调用的应用系统很多。例如，在编程环境中用于集成各种工具，在数据库管理系统中确保数据的一致性约束，在用户界面系统中管理数据，以 及在编辑器中支持语法检查。例如在某系统中，编辑器和变量监视器可以登记相应Debugger的断点事件。当Debugger在断点处停下时，它声明该事 件，由系统自动调用处理程序，如编辑程序可以卷屏到断点，变量监视器刷新变量数值。而Debugger本身只声明事件，并不关心哪些过程会启动，也不关心 这些过程做什么处理。</p>
<p>隐式调用系统的主要优点有：</p>
<p>（1）为软件重用提供了强大的支持。当需要将一个构件加入现存系统中时，只需将它注册到系统的事件中。</p>
<p>（2）为改进系统带来了方便。当用一个构件代替另一个构件时，不会影响到其它构件的接口。</p>
<p>隐式调用系统的主要缺点有：</p>
<p>（1）构件放弃了对系统计算的控制。一个构件触发一个事件时，不能确定其它构件是否会响应它。而且即使它知道事件注册了哪些构件的构成，它也不能保证这些过程被 调用的顺序。</p>
<p>（2）数据交换的问题。有时数据可被一个事件传递，但另一些情况下，基于事件的系统必须依靠一个共享的仓库进行交互。在这些情况下，全局性能和资源管理便成了问题。</p>
<p>（3）既然过程的语义必须依赖于被触发事件的上下文约束，关于正确性的推理存在问题。</p>
<p>五、层次系统风格</p>
<p>层次系统组织成一个层次结构，每一层为上层服务，并作为下层客户。在一些层次系统中，除了一些精心挑选的输出函数外，内部的层只对相邻的层可见。这样的 系统中构件在一些层实现了虚拟机（在另一些层次系统中层是部分不透明的）。连接件通过决定层间如何交互的协议来定义，拓扑约束包括对相邻层间交互的约束。</p>
<p>这种风格支持基于可增加抽象层的设计。这样，允许将一个复杂问题分解成一个增量步骤序列的实现。由于每一层最多只影响两层，同时只要给相邻层提供相同的接口，允许每层用不同的方法实现，同样为软件重用提供了强大的支持。</p>
<p>图4是层次系统风格的示意图。层次系统最广泛的应用是分层通信协议。在这一应用领域中，每一层提供一个抽象的功能，作为上层通信的基础。较低的层次定义低层的交互，最低层通常只定义硬件物理连接。</p>
<p>图4 层次系统风格的体系结构</p>
<p>层次系统有许多可取的属性：</p>
<p>（1）支持基于抽象程度递增的系统设计，使设计者可以把一个复杂系统按递增的步骤进行分解；</p>
<p>（2）支持功能增强，因为每一层至多和相邻的上下层交互，因此功能的改变最多影响相邻的上下层；</p>
<p>（3）支持重用。只要提供的服务接口定义不变，同一层的不同实现可以交换使用。这样，就可以定义一组标准的接口，而允许各种不同的实现方法。</p>
<p>但是，层次系统也有其不足之处：</p>
<p>（1）并不是每个系统都可以很容易地划分为分层的模式，甚至即使一个系统的逻辑结构是层次化的，出于对系统性能的考虑，系统设计师不得不把一些低级或高级的功能综合起来；</p>
<p>（2）很难找到一个合适的、正确的层次抽象方法。</p>
<p>六、仓库风格</p>
<p>在仓库风格中，有两种不同的构件：中央数据结构说明当前状态，独立构件在中央数据存贮上执行，仓库与外构件间的相互作用在系统中会有大的变化。</p>
<p>控制原则的选取产生两个主要的子类。若输入流中某类时间触发进程执行的选择，则仓库是一传统型数据库；另一方面，若中央数据结构的当前状态触发进程执行的选择，则仓库是一黑板系统。</p>
<p>图4是黑板系统的组成。黑板系统的传统应用是信号处理领域，如语音和模式识别。另一应用是松耦合代理数据共享存取。</p>
<p>图4 黑板系统的组成</p>
<p>我们从图4中可以看出，黑板系统主要由三部分组成：</p>
<p>（1）知识源。知识源中包含独立的、与应用程序相关的知识，知识源之间不直接进行通讯，它们之间的交互只通过黑板来完成。</p>
<p>（2）黑板数据结构。黑板数据是按照与应用程序相关的层次来组织的解决问题的数据，知识源通过不断地改变黑板数据来解决问题。</p>
<p>（3）控制。控制完全由黑板的状态驱动，黑板状态的改变决定使用的特定知识。</p>
<p>七、结束语</p>
<p>软件体系结构风格为大粒度的软件重用提供了可能。然而，对于应用体系结构风格来说，由于视点的不同，系统设计师有很大的选择空间。要为系统选择或设计某一个体系结构风格，必须根据特定项目的具体特点，进行分析比较后再确定，体系结构风格的使用几乎完全是特化的。</p>
<p>在本文中，我们只讲述了&#8221;纯&#8221;的体系结构。但是，从上面的介绍中，我们知道，不同的结构有不同的处理能力的强项和弱点，一个系统的体系结构应该根据实际 需要进行选择，以解决实际问题。事实上，也存在一些系统，它们是由这些纯体系结构组合而成，即采用了异构软件体系结构。关于软件体系结构的异构问题，我们 将在后续文章中进行介绍</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onlymarshall.com/2006/06/24/%e4%bd%93%e7%b3%bb%e7%bb%93%e6%9e%84%e9%a3%8e%e6%a0%bc%e5%88%86%e7%b1%bb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>什么是ERP(通俗版)</title>
		<link>http://www.onlymarshall.com/2006/06/15/%e4%bb%80%e4%b9%88%e6%98%aferp%e9%80%9a%e4%bf%97%e7%89%88/</link>
		<comments>http://www.onlymarshall.com/2006/06/15/%e4%bb%80%e4%b9%88%e6%98%aferp%e9%80%9a%e4%bf%97%e7%89%88/#comments</comments>
		<pubDate>Thu, 15 Jun 2006 20:36:00 +0000</pubDate>
		<dc:creator>marshall</dc:creator>
				<category><![CDATA[csdn导入]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[转载]]></category>
		<category><![CDATA[ERP]]></category>

		<guid isPermaLink="false">http://www.onlymarshall.com/?p=58</guid>
		<description><![CDATA[一天中午，丈夫在外给家里打电话：&#8221;亲爱的老婆，晚上我想带几个同事回家吃饭可以吗？&#8221;（订货意向） 妻子：&#8221;当然可以，来几个人，几点来，想吃什么菜？&#8221; 丈夫：&#8221;6个人，我们7点左右回来，准备些酒 烤鸭 番茄炒蛋 凉菜 蛋花汤。。。。。。，你看可以吗？&#8221;（商务沟通） 妻子：&#8221;没问题，我会准备好的，&#8221;（订单确认） 妻子记录下需要做的菜单（MPS计划），具体要准备的菜：鸭 酒 番茄 鸡蛋 作油。。。。。。（BOM物料清单），发现需要：1只鸭，5瓶酒，4个番茄，。。。。。。（BOM展开），炒蛋需要6个鸡蛋，蛋花汤需要4个鸡蛋（共用物料）。 打开冰箱一看（库房），只剩下2个鸡蛋（缺料）。 来到自由市场，妻子：&#8221;请问鸡蛋怎么卖？&#8221;（采购询价） 小贩：&#8221;1个1元，半打5元，1打9.5元。&#8221; 妻子：&#8221;我只需要8个，但这次买1打。&#8221;（经济批量采购） 妻子：&#8221;这有一个坏的，换一个。&#8221;（验收、退料、换料） 回到家中，准备洗菜 切菜 炒菜。。。。。。（工艺路线），厨房中有燃气灶、微波炉、电饭堡。。。。。。（工作中心）。妻子发现拔鸭毛最费时间（瓶颈工序，关键工艺路线），用微波炉自己做烤鸭可能就来不及（产能不足），于是决定在楼下的餐厅里买现成的（产品委外）。 下午4点，电话铃又响：&#8221;妈妈，晚上几个同学想来家里吃饭，你帮准备一下。&#8221; （紧急订单） &#8220;好的，儿子，你们想吃什么，爸爸晚上也有客人，你愿意和他们一起吃吗？&#8221; &#8220;菜你看着办吧，但一定要有番茄炒鸡蛋。我们不和大人一起吃，6：30左右回来。&#8221;（呵呵，不能并单处理） &#8220;好的，肯定让你们满意。&#8221;（订单确认） 鸡蛋又不够了，打电话叫小贩送来。（紧急采购） 6：30，一切准备就绪，可烤鸭还没送来，急忙打电话询问：&#8221;我是李太太，怎么订的烤鸭还没送来。&#8221;（采购 委外单跟催） &#8220;不好意思，送货的人已经走了，可能是堵车吧，马上就会到的。&#8221; 门铃响了，&#8221;李太太，这是您要的烤鸭。请在单上签一个字。&#8221;（验收、入库、转应付帐款） 6：45，女儿的电话：&#8221;妈妈，我想现在带几个朋友回家吃饭可以吗？&#8221;（呵呵，又是紧急订购意向，要求现货） &#8220;不行呀，女儿，今天妈妈已经需要准备两桌饭了，时间实在是来不及，真的非常抱歉，下次早点说，一定给你们准备好。&#8221;（哈哈，这就是ERP的使用局限，要有稳定的外部环境，要有一个起码的提前期） 送走了所有客人，疲惫的妻子坐在沙发上对丈夫说：&#8221;亲爱的，现在咱们家请客的频率非常高，应该要买些厨房用品了（设备采购），最好能再雇个小保姆（连人力资源系统也有接口了）。&#8221; 丈夫：&#8221;家里你做主，需要什么你就去办吧。&#8221;（通过审核） 妻子：&#8221;还有，最近家里花销太大，用你的私房钱来补贴一下，好吗？&#8221;（哈哈哈哈，最后就是应收货款的催要） 现在还有人不理解ERP吗？记住，每一个合格的家庭主妇都是生产厂长的有力竞争者！！！！]]></description>
			<content:encoded><![CDATA[<p>一天中午，丈夫在外给家里打电话：&#8221;亲爱的老婆，晚上我想带几个同事回家吃饭可以吗？&#8221;（订货意向）<br />
妻子：&#8221;当然可以，来几个人，几点来，想吃什么菜？&#8221;<br />
丈夫：&#8221;6个人，我们7点左右回来，准备些酒 烤鸭 番茄炒蛋 凉菜 蛋花汤。。。。。。，你看可以吗？&#8221;（商务沟通）<br />
妻子：&#8221;没问题，我会准备好的，&#8221;（订单确认）<br />
妻子记录下需要做的菜单（MPS计划），具体要准备的菜：鸭 酒 番茄 鸡蛋 作油。。。。。。（BOM物料清单），发现需要：1只鸭，5瓶酒，4个番茄，。。。。。。（BOM展开），炒蛋需要6个鸡蛋，蛋花汤需要4个鸡蛋（共用物料）。<br />
打开冰箱一看（库房），只剩下2个鸡蛋（缺料）。<br />
来到自由市场，妻子：&#8221;请问鸡蛋怎么卖？&#8221;（采购询价）<br />
小贩：&#8221;1个1元，半打5元，1打9.5元。&#8221;<br />
妻子：&#8221;我只需要8个，但这次买1打。&#8221;（经济批量采购）<br />
妻子：&#8221;这有一个坏的，换一个。&#8221;（验收、退料、换料）<br />
回到家中，准备洗菜 切菜 炒菜。。。。。。（工艺路线），厨房中有燃气灶、微波炉、电饭堡。。。。。。（工作中心）。妻子发现拔鸭毛最费时间（瓶颈工序，关键工艺路线），用微波炉自己做烤鸭可能就来不及（产能不足），于是决定在楼下的餐厅里买现成的（产品委外）。</p>
<p>下午4点，电话铃又响：&#8221;妈妈，晚上几个同学想来家里吃饭，你帮准备一下。&#8221; （紧急订单）<br />
&#8220;好的，儿子，你们想吃什么，爸爸晚上也有客人，你愿意和他们一起吃吗？&#8221;<br />
&#8220;菜你看着办吧，但一定要有番茄炒鸡蛋。我们不和大人一起吃，6：30左右回来。&#8221;（呵呵，不能并单处理）<br />
&#8220;好的，肯定让你们满意。&#8221;（订单确认）<br />
鸡蛋又不够了，打电话叫小贩送来。（紧急采购）</p>
<p>6：30，一切准备就绪，可烤鸭还没送来，急忙打电话询问：&#8221;我是李太太，怎么订的烤鸭还没送来。&#8221;（采购 委外单跟催）<br />
&#8220;不好意思，送货的人已经走了，可能是堵车吧，马上就会到的。&#8221;<br />
门铃响了，&#8221;李太太，这是您要的烤鸭。请在单上签一个字。&#8221;（验收、入库、转应付帐款）<br />
6：45，女儿的电话：&#8221;妈妈，我想现在带几个朋友回家吃饭可以吗？&#8221;（呵呵，又是紧急订购意向，要求现货）<br />
&#8220;不行呀，女儿，今天妈妈已经需要准备两桌饭了，时间实在是来不及，真的非常抱歉，下次早点说，一定给你们准备好。&#8221;（哈哈，这就是ERP的使用局限，要有稳定的外部环境，要有一个起码的提前期）</p>
<p>送走了所有客人，疲惫的妻子坐在沙发上对丈夫说：&#8221;亲爱的，现在咱们家请客的频率非常高，应该要买些厨房用品了（设备采购），最好能再雇个小保姆（连人力资源系统也有接口了）。&#8221;<br />
丈夫：&#8221;家里你做主，需要什么你就去办吧。&#8221;（通过审核）<br />
妻子：&#8221;还有，最近家里花销太大，用你的私房钱来补贴一下，好吗？&#8221;（哈哈哈哈，最后就是应收货款的催要）</p>
<p>现在还有人不理解ERP吗？记住，每一个合格的家庭主妇都是生产厂长的有力竞争者！！！！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onlymarshall.com/2006/06/15/%e4%bb%80%e4%b9%88%e6%98%aferp%e9%80%9a%e4%bf%97%e7%89%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>走向J2EE，漫长的道路</title>
		<link>http://www.onlymarshall.com/2006/06/13/%e8%b5%b0%e5%90%91j2ee%ef%bc%8c%e6%bc%ab%e9%95%bf%e7%9a%84%e9%81%93%e8%b7%af/</link>
		<comments>http://www.onlymarshall.com/2006/06/13/%e8%b5%b0%e5%90%91j2ee%ef%bc%8c%e6%bc%ab%e9%95%bf%e7%9a%84%e9%81%93%e8%b7%af/#comments</comments>
		<pubDate>Wed, 14 Jun 2006 00:00:00 +0000</pubDate>
		<dc:creator>marshall</dc:creator>
				<category><![CDATA[csdn导入]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[转载]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaEE]]></category>

		<guid isPermaLink="false">http://www.onlymarshall.com/?p=59</guid>
		<description><![CDATA[初次涉及Java领域，感觉到Java入门是好像没有C,C++入门快，工具也没有什么Turbo C ,Visual C++好用（自己的破机器实在陪不起JBuilder，贪婪的家伙，以后一定要收拾她 ）。什么JAVA_HOME,CLASSPATH，虚拟机等概念都是初次基础，旁边的人都很少用Java的 。感觉Java就是做Applet的。慢慢的知道了http://java.sun.com，开始知道Java博大精 深。让我不可思议的是JAVA 2,JDK,J2SE,J2EE,J2ME等新名词在自己的脑海里蔓延。慢慢 的自己知道了JCP组织是制定Java相关规范的发源地http://java.jcp.org ,于是订阅了 一份邮件列表。真是好东西啊，定期有Java的最新动向，所以Java的动态尽收眼里，建 议大家也去订阅一份。免费的。自己动手下载了Java(TM) 2 SDK和Java(TM) 2 SDK Doc umentation后,不懂的就查Java(TM) 2 SDK Documentation,特别好用，也不需要什么手 册之类的，建议大家都要有一份。 搭起Java开发环境后，记得还是用UltraEdit编辑并编译的（在其中可以配好Java的编译 环境）。慢慢的改用JCreator了。不错，至少很多方面有改进。最开始卖了一套&#60;Java 2核心技术&#62; 2本书，还不错。对于入门来说足够了。慢慢的知道&#60;Thinking in Java&#62;是 一本好书，后来才知道，有了Java经验后，看这本书特别过瘾，所以现在还经常翻翻。 周而复始的看，效果特别好。慢慢的知道了Oreilly公司（http://www.oreilly.com）出 的图书不错，很高雅，国内翻译的也还可以（http://www.oreilly.com.cn）。本人收集 了很多Oreilly的原版图书，有需要的可以和我联系（Acrobat pdf格式）。慢慢知道了 jjhou这个人.(http://jjhou.csdn.net )以及他的个人网站，最让我感兴趣的是jjhou老 师写的散文，书评，很有收获，不是为技术而技术。很有趣味性。其中, http://www.e pubcn.com 上有很多美丽的图书。 不知道什么时候，要开始干项目了，以前从书上看到的东西，慢慢的在项目中有了很好 的机会去温习，慢慢的有了感觉，开始主要是用Swing,开发桌面系统，放置一个按钮怎 么也放不好，后来才知道有一个布局管理器。咳，这个婆婆的Java也讨厌的很。开始涉 及到数据库访问,JDBC。后来我才知道，Sun的Java网站有一个Java Tutorial。（http: //java.sun.com/docs/books/tutorial/ ）。同时，也知道了蔡先生的sleepless in j ava(http://www.oreilly.com.tw/sleepless/index.htm ),太美了，美的很。满满的， OReilly, http://www.onjava.com/ 也是不错的地方。都有很多优秀的文章。http://w ww-900.ibm.com/developerWorks/cn/index.shtml，也很棒。 每次，美美的享用一顿大餐后，也来也觉得自己是不是应该换一种学习方式，因为这样 学习效果不太好。比较乱。让我想起了Java Specification，对，我开始研究Java规范 [...]]]></description>
			<content:encoded><![CDATA[<p>初次涉及Java领域，感觉到Java入门是好像没有C,C++入门快，工具也没有什么Turbo C<br />
,Visual C++好用（自己的破机器实在陪不起JBuilder，贪婪的家伙，以后一定要收拾她<br />
）。什么JAVA_HOME,CLASSPATH，虚拟机等概念都是初次基础，旁边的人都很少用Java的<br />
。感觉Java就是做Applet的。慢慢的知道了<a href="http://java.sun.com/" target="_blank">http://java.sun.com</a>，开始知道Java博大精<br />
深。让我不可思议的是JAVA 2,JDK,J2SE,J2EE,J2ME等新名词在自己的脑海里蔓延。慢慢<br />
的自己知道了JCP组织是制定Java相关规范的发源地<a href="http://java.jcp.org/" target="_blank">http://java.jcp.org</a> ,于是订阅了<br />
一份邮件列表。真是好东西啊，定期有Java的最新动向，所以Java的动态尽收眼里，建<br />
议大家也去订阅一份。免费的。自己动手下载了Java(TM) 2 SDK和Java(TM) 2 SDK Doc<br />
umentation后,不懂的就查Java(TM) 2 SDK Documentation,特别好用，也不需要什么手<br />
册之类的，建议大家都要有一份。<br />
搭起Java开发环境后，记得还是用UltraEdit编辑并编译的（在其中可以配好Java的编译<br />
环境）。慢慢的改用JCreator了。不错，至少很多方面有改进。最开始卖了一套&lt;Java<br />
2核心技术&gt; 2本书，还不错。对于入门来说足够了。慢慢的知道&lt;Thinking in Java&gt;是<br />
一本好书，后来才知道，有了Java经验后，看这本书特别过瘾，所以现在还经常翻翻。<br />
周而复始的看，效果特别好。慢慢的知道了Oreilly公司（<a href="http://www.oreilly.com/" target="_blank">http://www.oreilly.com</a>）出<br />
的图书不错，很高雅，国内翻译的也还可以（<a href="http://www.oreilly.com.cn/" target="_blank">http://www.oreilly.com.cn</a>）。本人收集<br />
了很多Oreilly的原版图书，有需要的可以和我联系（Acrobat pdf格式）。慢慢知道了<br />
jjhou这个人.(<a href="http://jjhou.csdn.net/" target="_blank">http://jjhou.csdn.net</a> )以及他的个人网站，最让我感兴趣的是jjhou老<br />
师写的散文，书评，很有收获，不是为技术而技术。很有趣味性。其中, <a href="http://www.e/" target="_blank">http://www.e</a><br />
pubcn.com 上有很多美丽的图书。<br />
不知道什么时候，要开始干项目了，以前从书上看到的东西，慢慢的在项目中有了很好<br />
的机会去温习，慢慢的有了感觉，开始主要是用Swing,开发桌面系统，放置一个按钮怎<br />
么也放不好，后来才知道有一个布局管理器。咳，这个婆婆的Java也讨厌的很。开始涉<br />
及到数据库访问,JDBC。后来我才知道，Sun的Java网站有一个Java Tutorial。（http:<br />
//java.sun.com/docs/books/tutorial/ ）。同时，也知道了蔡先生的sleepless in j<br />
ava(<a href="http://www.oreilly.com.tw/sleepless/index.htm" target="_blank">http://www.oreilly.com.tw/sleepless/index.htm</a> ),太美了，美的很。满满的，<br />
OReilly, <a href="http://www.onjava.com/" target="_blank">http://www.onjava.com/</a> 也是不错的地方。都有很多优秀的文章。<a href="http://w/" target="_blank">http://w</a><br />
ww-900.ibm.com/developerWorks/cn/index.shtml，也很棒。<br />
每次，美美的享用一顿大餐后，也来也觉得自己是不是应该换一种学习方式，因为这样<br />
学习效果不太好。比较乱。让我想起了Java Specification，对，我开始研究Java规范<br />
了。最开始下载的规范是JDBC Specification，很多概念一目了然，尤其是DATABASE的<br />
事务性控制，自己对于她的理解慢慢的有了较为深入的了解。对于开发C/S结构，比如,<br />
Swing+JDBC,开发数据库应用系统，让我学会开发两层结构的应用系统。很神气。<br />
也不知道什么时候要开始开发一个网站，基于Linux+JSP+JavaBean+Oracle的系统。很是<br />
有意思。为什么这么说呢？因为不同于Swing+JDBC的开发模式，系统之间多了一层(Jav<br />
aBean,姑且就这么叫吧！嘻嘻)；同时，很多开发技术和面向左面系统不一样，比如分页<br />
技术。<br />
完成项目后，自己对于Java的很多方面都比较了解了。开始思考一个问题，J2EE是什么<br />
东西？。我们学习Java大概有3个方向，第一，桌面系统，包括C/S结构；第二，J2ME,面<br />
向无限领域，很有潜力的家伙，看看中国的手机用户就知道了。第三，面向企业应用、<br />
计算的平台,J2EE。<br />
在痛苦的抉择后，我选择J2EE..分享J2EE给我带来的快乐。学到现在，最大的感觉，就<br />
是: 简单就是美，美就是Java.不会有学MFC的痛苦，也不会有去分析STL的艰辛，网路应<br />
用上一点也不逊色于C++。开始进入我的J2EE之旅。<br />
还是下载了一份J2EE规范，一份J2EE SDK。开始研究J2EE,结合<a href="http://java.sun.com/j" target="_blank">http://java.sun.com/j</a><br />
2ee/tutorial/index.html 提供的J2EE Tutorial开始研究了。大概过了1个月，开始有<br />
感觉了，也就在这个时候，需要我去完成一个J2EE构架方面的项目。差不多边学编写完<br />
成了，很多概念在写完后都不是很清晰，因为东西太多了，主要是基于JSP(Servlet)+S<br />
ession Bean+EIS构架开发系统。当然也学到很多东西，至少对SB EJB的编写不成问题。<br />
懂得了JSP如何调用EJB……。<br />
完成项目后，我开始研究Java Pet Store了，很是过瘾。开始知道了Servlet过滤器，X<br />
ML方面较为全面的知识，知道了J2EE整个框架中各种技术的实际应用。慢慢的，开始研<br />
究WebLogic配置好的Pet Store（也是Sun公司的）。慢慢的分析两者的不同之处。开始<br />
对J2EE Specification有了很好的感觉。因为J2EE Specification本身是很严肃的，但<br />
Pet Store给出了活力。<br />
在反复的学习中，我明白了J2EE构架的70—80%。新的问题又出来了，实际企业中会如何<br />
建构一个J2EE系统呢？带着这个问题，我开始分析Core J2EE Patterns,这本书。同时，<br />
也有EJB Design Patterns。慢慢的，开始知道了J2EE的魅力所在，知道了J2EE为什么会<br />
在企业中得到较为好的认可。<br />
大家都知道，设计模式一词，在公司上班，你们的老板会看你的代码吗？会赞赏你的DP<br />
很好吗，我想很少。在完成你的工作进度之余，加班，加班，再加班，我想你没有更多<br />
的时间去分析研究DP。但J2EE框架不一样，她内置了很多优秀的设计模式，我们在设计<br />
开发、构架一个J2EE系统中用到了很多设计模式。比如，MVC,EJB中封装的DAO设计模式<br />
。构架J2E系统用Session Fa?ade,Message Fa?ade设计模式也不会太困难。这也是后来<br />
J2EE吸引我的地方。<br />
慢慢的我知道了，作为一个J2EE开发者，我们要掌握其中的核心内容。我个人认为，3方<br />
面很重要。实施EJB系统常用的架构、设计模式，比如session fa?ade、message fa?ad<br />
e、DTO等。J2EE系统构架中常用的模式。UML-&gt; EJB,EJB-&gt;UML相互映射。现在也一样在<br />
研究。<br />
善于享受孤独，幸好还有J2EE！</p>
<p><![CDATA[初次涉及Java领域，感觉到Java入门是好像没有C,C++入门快，工具也没有什么Turbo C<br />
,Visual C++好用（自己的破机器实在陪不起JBuilder，贪婪的家伙，以后一定要收拾她<br />
）。什么JAVA_HOME,CLASSPATH，虚拟机等概念都是初次基础，旁边的人都很少用Java的<br />
。感觉Java就是做Applet的。慢慢的知道了<a target="_blank" href="http://java.sun.com/" mce_href="http://java.sun.com/">http://java.sun.com</a>，开始知道Java博大精<br />
深。让我不可思议的是JAVA 2,JDK,J2SE,J2EE,J2ME等新名词在自己的脑海里蔓延。慢慢<br />
的自己知道了JCP组织是制定Java相关规范的发源地<a target="_blank" href="http://java.jcp.org/" mce_href="http://java.jcp.org/">http://java.jcp.org</a> ,于是订阅了<br />
一份邮件列表。真是好东西啊，定期有Java的最新动向，所以Java的动态尽收眼里，建<br />
议大家也去订阅一份。免费的。自己动手下载了Java(TM) 2 SDK和Java(TM) 2 SDK Doc<br />
umentation后,不懂的就查Java(TM) 2 SDK Documentation,特别好用，也不需要什么手<br />
册之类的，建议大家都要有一份。<br />
搭起Java开发环境后，记得还是用UltraEdit编辑并编译的（在其中可以配好Java的编译<br />
环境）。慢慢的改用JCreator了。不错，至少很多方面有改进。最开始卖了一套<java<br />
2核心技术> 2本书，还不错。对于入门来说足够了。慢慢的知道</p>
<thinking in Java>是<br />
一本好书，后来才知道，有了Java经验后，看这本书特别过瘾，所以现在还经常翻翻。<br />
周而复始的看，效果特别好。慢慢的知道了Oreilly公司（<a target="_blank" href="http://www.oreilly.com/" mce_href="http://www.oreilly.com/">http://www.oreilly.com</a>）出<br />
的图书不错，很高雅，国内翻译的也还可以（<a target="_blank" href="http://www.oreilly.com.cn/" mce_href="http://www.oreilly.com.cn/">http://www.oreilly.com.cn</a>）。本人收集<br />
了很多Oreilly的原版图书，有需要的可以和我联系（Acrobat pdf格式）。慢慢知道了<br />
jjhou这个人.(<a target="_blank" href="http://jjhou.csdn.net/" mce_href="http://jjhou.csdn.net/">http://jjhou.csdn.net</a> )以及他的个人网站，最让我感兴趣的是jjhou老<br />
师写的散文，书评，很有收获，不是为技术而技术。很有趣味性。其中, <a target="_blank" href="http://www.e/" mce_href="http://www.e/">http://www.e</a><br />
pubcn.com 上有很多美丽的图书。<br />
不知道什么时候，要开始干项目了，以前从书上看到的东西，慢慢的在项目中有了很好<br />
的机会去温习，慢慢的有了感觉，开始主要是用Swing,开发桌面系统，放置一个按钮怎<br />
么也放不好，后来才知道有一个布局管理器。咳，这个婆婆的Java也讨厌的很。开始涉<br />
及到数据库访问,JDBC。后来我才知道，Sun的Java网站有一个Java Tutorial。（http:<br />
//java.sun.com/docs/books/tutorial/ ）。同时，也知道了蔡先生的sleepless in j<br />
ava(<a target="_blank" href="http://www.oreilly.com.tw/sleepless/index.htm" mce_href="http://www.oreilly.com.tw/sleepless/index.htm">http://www.oreilly.com.tw/sleepless/index.htm</a> ),太美了，美的很。满满的，<br />
OReilly, <a target="_blank" href="http://www.onjava.com/" mce_href="http://www.onjava.com/">http://www.onjava.com/</a> 也是不错的地方。都有很多优秀的文章。<a target="_blank" href="http://w/" mce_href="http://w/">http://w</a><br />
ww-900.ibm.com/developerWorks/cn/index.shtml，也很棒。<br />
每次，美美的享用一顿大餐后，也来也觉得自己是不是应该换一种学习方式，因为这样<br />
学习效果不太好。比较乱。让我想起了Java Specification，对，我开始研究Java规范<br />
了。最开始下载的规范是JDBC Specification，很多概念一目了然，尤其是DATABASE的<br />
事务性控制，自己对于她的理解慢慢的有了较为深入的了解。对于开发C/S结构，比如,<br />
Swing+JDBC,开发数据库应用系统，让我学会开发两层结构的应用系统。很神气。<br />
也不知道什么时候要开始开发一个网站，基于Linux+JSP+JavaBean+Oracle的系统。很是<br />
有意思。为什么这么说呢？因为不同于Swing+JDBC的开发模式，系统之间多了一层(Jav<br />
aBean,姑且就这么叫吧！嘻嘻)；同时，很多开发技术和面向左面系统不一样，比如分页<br />
技术。<br />
完成项目后，自己对于Java的很多方面都比较了解了。开始思考一个问题，J2EE是什么<br />
东西？。我们学习Java大概有3个方向，第一，桌面系统，包括C/S结构；第二，J2ME,面<br />
向无限领域，很有潜力的家伙，看看中国的手机用户就知道了。第三，面向企业应用、<br />
计算的平台,J2EE。<br />
在痛苦的抉择后，我选择J2EE..分享J2EE给我带来的快乐。学到现在，最大的感觉，就<br />
是: 简单就是美，美就是Java.不会有学MFC的痛苦，也不会有去分析STL的艰辛，网路应<br />
用上一点也不逊色于C++。开始进入我的J2EE之旅。<br />
还是下载了一份J2EE规范，一份J2EE SDK。开始研究J2EE,结合<a target="_blank" href="http://java.sun.com/j" mce_href="http://java.sun.com/j">http://java.sun.com/j</a><br />
2ee/tutorial/index.html 提供的J2EE Tutorial开始研究了。大概过了1个月，开始有<br />
感觉了，也就在这个时候，需要我去完成一个J2EE构架方面的项目。差不多边学编写完<br />
成了，很多概念在写完后都不是很清晰，因为东西太多了，主要是基于JSP(Servlet)+S<br />
ession Bean+EIS构架开发系统。当然也学到很多东西，至少对SB EJB的编写不成问题。<br />
懂得了JSP如何调用EJB&hellip;&hellip;。<br />
完成项目后，我开始研究Java Pet Store了，很是过瘾。开始知道了Servlet过滤器，X<br />
ML方面较为全面的知识，知道了J2EE整个框架中各种技术的实际应用。慢慢的，开始研<br />
究WebLogic配置好的Pet Store（也是Sun公司的）。慢慢的分析两者的不同之处。开始<br />
对J2EE Specification有了很好的感觉。因为J2EE Specification本身是很严肃的，但<br />
Pet Store给出了活力。<br />
在反复的学习中，我明白了J2EE构架的70&mdash;80%。新的问题又出来了，实际企业中会如何<br />
建构一个J2EE系统呢？带着这个问题，我开始分析Core J2EE Patterns,这本书。同时，<br />
也有EJB Design Patterns。慢慢的，开始知道了J2EE的魅力所在，知道了J2EE为什么会<br />
在企业中得到较为好的认可。<br />
大家都知道，设计模式一词，在公司上班，你们的老板会看你的代码吗？会赞赏你的DP<br />
很好吗，我想很少。在完成你的工作进度之余，加班，加班，再加班，我想你没有更多<br />
的时间去分析研究DP。但J2EE框架不一样，她内置了很多优秀的设计模式，我们在设计<br />
开发、构架一个J2EE系统中用到了很多设计模式。比如，MVC,EJB中封装的DAO设计模式<br />
。构架J2E系统用Session Fa?ade,Message Fa?ade设计模式也不会太困难。这也是后来<br />
J2EE吸引我的地方。<br />
慢慢的我知道了，作为一个J2EE开发者，我们要掌握其中的核心内容。我个人认为，3方<br />
面很重要。实施EJB系统常用的架构、设计模式，比如session fa?ade、message fa?ad<br />
e、DTO等。J2EE系统构架中常用的模式。UML-> EJB,EJB->UML相互映射。现在也一样在<br />
研究。<br />
善于享受孤独，幸好还有J2EE！]]&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onlymarshall.com/2006/06/13/%e8%b5%b0%e5%90%91j2ee%ef%bc%8c%e6%bc%ab%e9%95%bf%e7%9a%84%e9%81%93%e8%b7%af/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[存档]浅谈：切换视时基于FormView的对话框属性设置与ASSERT报错的问题</title>
		<link>http://www.onlymarshall.com/2006/06/13/%e5%ad%98%e6%a1%a3%e6%b5%85%e8%b0%88%ef%bc%9a%e5%88%87%e6%8d%a2%e8%a7%86%e6%97%b6%e5%9f%ba%e4%ba%8eformview%e7%9a%84%e5%af%b9%e8%af%9d%e6%a1%86%e5%b1%9e%e6%80%a7%e8%ae%be%e7%bd%ae%e4%b8%8eassert/</link>
		<comments>http://www.onlymarshall.com/2006/06/13/%e5%ad%98%e6%a1%a3%e6%b5%85%e8%b0%88%ef%bc%9a%e5%88%87%e6%8d%a2%e8%a7%86%e6%97%b6%e5%9f%ba%e4%ba%8eformview%e7%9a%84%e5%af%b9%e8%af%9d%e6%a1%86%e5%b1%9e%e6%80%a7%e8%ae%be%e7%bd%ae%e4%b8%8eassert/#comments</comments>
		<pubDate>Tue, 13 Jun 2006 19:26:00 +0000</pubDate>
		<dc:creator>marshall</dc:creator>
				<category><![CDATA[csdn导入]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[转载]]></category>
		<category><![CDATA[EVC]]></category>

		<guid isPermaLink="false">http://www.onlymarshall.com/?p=62</guid>
		<description><![CDATA[这是在做EVC的作业时碰到的问题,查到的文章,存个档~~~ 最近做的项目中用到了FormView切换视图，其主要原理是：先新建一些Dialog对话框，然后给这些对话框绑定对应的View，注意：这些View要基于FormView。 一开始还好好的，利用切换视的代码进行的很顺利(网上的相关代码很多，我就不赘述了)，但是，后来新加了两个Dialog，不知我怎么弄的，奇怪的事发生了：先前添加了Dialog都能正常的切换，但是，一切换新添加的Dialog，每次运行到： BOOL CFormView::Create(LPCTSTR /*lpszClassName*/, LPCTSTR /*lpszWindowName*/, DWORD dwRequestedStyle, const RECT&#38; rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) { ASSERT(pParentWnd != NULL); ASSERT(m_lpszTemplateName != NULL); m_pCreateContext = pContext;    // save state for later OnCreate #ifdef _DEBUG // dialog template must exist and be invisible with WS_CHILD set  &#60;——请注意此处 if (!_AfxCheckDialogTemplate(m_lpszTemplateName, TRUE)) { ASSERT(FALSE);          // invalid [...]]]></description>
			<content:encoded><![CDATA[<p>这是在做EVC的作业时碰到的问题,查到的文章,存个档~~~</p>
<p>最近做的项目中用到了<span style="color: #0000ff;">FormView</span>切换视图，其主要原理是：先新建一些Dialog对话框，然后给这些对话框绑定对应的View，注意：这些View要基于FormView。<br />
一开始还好好的，利用<strong><span style="color: #ff0000;">切换视</span></strong>的代码进行的很顺利(网上的相关代码很多，我就不赘述了)，但是，后来新加了两个Dialog，不知我怎么弄的，奇怪的事发生了：先前添加了Dialog都能正常的切换，但是，一切换新添加的Dialog，每次运行到：</p>
<p><span style="color: #008000;">BOOL CFormView::Create(LPCTSTR /*lpszClassName*/, LPCTSTR /*lpszWindowName*/,<br />
DWORD dwRequestedStyle, const RECT&amp; rect, CWnd* pParentWnd, UINT nID,<br />
CCreateContext* pContext)<br />
{<br />
ASSERT(pParentWnd != NULL);<br />
ASSERT(m_lpszTemplateName != NULL);</span></p>
<p><span style="color: #008000;"> m_pCreateContext = pContext;    // save state for later OnCreate</span></p>
<p><span style="color: #006400;"><span style="color: #008000;">#ifdef _DEBUG<br />
// dialog template must exist and be invisible with WS_CHILD set  <span style="color: #ff0000;">&lt;——请注意此处</span><br />
if (!_AfxCheckDialogTemplate(m_lpszTemplateName, TRUE))<br />
{<br />
ASSERT(FALSE);          // invalid dialog template name<br />
PostNcDestroy();        // cleanup if Create fails too soon<br />
return FALSE;<br />
}<br />
#endif //_DEBUG</span><br />
</span><br />
中的ASSERT时就报错，而在Release版本下却不会报错。我检查了一下这两个新加的Dialog与先前的Dialog属性有哪些不同，原来是自己把后来加的Dialog的Visible属性设置成了TRUE了, 根据代码的要求是：对话框模板必须存在，属性要设置成不可见和子窗口风格。SystemMenu和TitleBar属性最好都设为False，改完以后，一切正常~~<br />
<span style="color: #0000ff;">注：还有一种方法就是在添加Dialog资源时，在Dialog列表上点右键-&gt;添加资源，选择Dialog-&gt;IDD_FORMVIEW,再点“新建”按钮，这样新建出来的Dialog属性就会自动配好了</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.onlymarshall.com/2006/06/13/%e5%ad%98%e6%a1%a3%e6%b5%85%e8%b0%88%ef%bc%9a%e5%88%87%e6%8d%a2%e8%a7%86%e6%97%b6%e5%9f%ba%e4%ba%8eformview%e7%9a%84%e5%af%b9%e8%af%9d%e6%a1%86%e5%b1%9e%e6%80%a7%e8%ae%be%e7%bd%ae%e4%b8%8eassert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开发web应用难于上青天,web开发十八难</title>
		<link>http://www.onlymarshall.com/2006/06/08/%e5%bc%80%e5%8f%91web%e5%ba%94%e7%94%a8%e9%9a%be%e4%ba%8e%e4%b8%8a%e9%9d%92%e5%a4%a9web%e5%bc%80%e5%8f%91%e5%8d%81%e5%85%ab%e9%9a%be/</link>
		<comments>http://www.onlymarshall.com/2006/06/08/%e5%bc%80%e5%8f%91web%e5%ba%94%e7%94%a8%e9%9a%be%e4%ba%8e%e4%b8%8a%e9%9d%92%e5%a4%a9web%e5%bc%80%e5%8f%91%e5%8d%81%e5%85%ab%e9%9a%be/#comments</comments>
		<pubDate>Thu, 08 Jun 2006 10:41:00 +0000</pubDate>
		<dc:creator>marshall</dc:creator>
				<category><![CDATA[csdn导入]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[转载]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.onlymarshall.com/?p=64</guid>
		<description><![CDATA[系统越做越大，问题越来越多，有些彻底解决了，有些凑合解决了，有些还没有办法，现在把碰到的主要问题列出来，给大家前车之覆： 1  跨浏览器布局的问题： 由于浏览器之间的微小差距，在布局复杂的页面时将会碰到麻烦 我现在的项目就要求firefox 和ie. 由于ie一些著名的bug，有时候不小心就踩到地雷。 2  日期控件 如何实现跨浏览器的日期控件，如何设定缺省值，如何实现大范围的日期直接定位？如何自适应多区域格式问题？ 我也用过不少现成的东西，比如 http://www.mattkruse.com/javascript/calendarpopup/ 但都有或多或少的问题 3、分辨率 如何支持常见分辨率，例如800*600 ，1024*768，1280*1024？表格和层如何自适应？ 有些客户喜欢居左居中，有些内容超宽，有些超宽内容还在容器里，有些还要叠加，把这些混在一起麻烦就来了 4、防止SQL注入式攻击 参数使用占位符，这个算是基本解决了，只是有些担心数据库的效率。 5．防止脚本攻击。  有时候需要在页面允许部分html或javascript代码, 如显示多行文本。 html 转义我知道，但我要允许部分html代码起作用，比如我要让&#60;br&#62;起作用，其他不起作用，以实现多行文本 6、用户非授权页面访问 如何实现每个页面的安全验证，如何防止用户通过直接拷贝具体页面地址等方式，访问系统；  包括没有链接的某些页面和jsp 页面。 如何控制部分权限，最小控制单元是什么？ 看上去很简单，但一深思问题就来了， 每个页面的安全验证：动态页面一般是 URL + Query String URL数量有限，但Query String一般以id为参数，有许多，所以如以URL为基础验证，则有时候 粒度不够细，如加上Query String，则不能再以配置表为基础校验，因为Query String乘以 用户数量（或角色数量，将是一个天文数字），所以如何建立安全验证规则表又是一个头疼的 问题，每个系统的安全验证规则都不一样。 再深入，你会发现如果一个操作被分成几个步骤，此时，这几个步骤的页面必须是相同的权限 设置，否则用户操作到一半，告诉他没有权限，他会被气死的。 如果再细化粒度，页面某些元素能够被部分用户修改和看见，你的头开始疼了吗？ 7、重复提交问题 功能操作完成后，鼠标右键点击所在页面，选择弹出菜单的刷新功能，容易出现重复提交问题。 功能操作完成后，通过浏览器的后退键进行重复操作，容易出现重复提交问题。 URL没有重定向，刷新页面出现重复提交问题。 某功能键反应时间延迟时，在短时间内重复点击该功能键，容易出现重复提交问题； 某些用户习惯双击按钮，某些用户错误地点了两次按钮，某些鼠标出现故障，导致单击变成双击，结果发生重复提交。 如果不加处理，这些请求都会被服务器处理，从而导致错误的结果。 struts的token确实能解决问题，但用户老是向我抱怨，为什么我不 能用浏览器的回退按钮重新提交，我在其他网站上从没有这个问题，你如何解释？ 然后你还会发现部分操作是能够允许重复提交的。 [...]]]></description>
			<content:encoded><![CDATA[<p>系统越做越大，问题越来越多，有些彻底解决了，有些凑合解决了，有些还没有办法，现在把碰到的主要问题列出来，给大家前车之覆：</p>
<p>1  跨浏览器布局的问题： 由于浏览器之间的微小差距，在布局复杂的页面时将会碰到麻烦<br />
我现在的项目就要求firefox 和ie. 由于ie一些著名的bug，有时候不小心就踩到地雷。</p>
<p>2  日期控件<br />
如何实现跨浏览器的日期控件，如何设定缺省值，如何实现大范围的日期直接定位？如何自适应多区域格式问题？<br />
我也用过不少现成的东西，比如 http://www.mattkruse.com/javascript/calendarpopup/<br />
但都有或多或少的问题</p>
<p>3、分辨率<br />
如何支持常见分辨率，例如800*600 ，1024*768，1280*1024？表格和层如何自适应？<br />
有些客户喜欢居左居中，有些内容超宽，有些超宽内容还在容器里，有些还要叠加，把这些混在一起麻烦就来了</p>
<p>4、防止SQL注入式攻击<br />
参数使用占位符，这个算是基本解决了，只是有些担心数据库的效率。</p>
<p>5．防止脚本攻击。  有时候需要在页面允许部分html或javascript代码, 如显示多行文本。<br />
html 转义我知道，但我要允许部分html代码起作用，比如我要让&lt;br&gt;起作用，其他不起作用，以实现多行文本<br />
6、用户非授权页面访问<br />
如何实现每个页面的安全验证，如何防止用户通过直接拷贝具体页面地址等方式，访问系统；  包括没有链接的某些页面和jsp 页面。 如何控制部分权限，最小控制单元是什么？</p>
<p>看上去很简单，但一深思问题就来了，<br />
每个页面的安全验证：动态页面一般是 URL + Query String<br />
URL数量有限，但Query String一般以id为参数，有许多，所以如以URL为基础验证，则有时候<br />
粒度不够细，如加上Query String，则不能再以配置表为基础校验，因为Query String乘以<br />
用户数量（或角色数量，将是一个天文数字），所以如何建立安全验证规则表又是一个头疼的<br />
问题，每个系统的安全验证规则都不一样。</p>
<p>再深入，你会发现如果一个操作被分成几个步骤，此时，这几个步骤的页面必须是相同的权限<br />
设置，否则用户操作到一半，告诉他没有权限，他会被气死的。</p>
<p>如果再细化粒度，页面某些元素能够被部分用户修改和看见，你的头开始疼了吗？<br />
7、重复提交问题<br />
功能操作完成后，鼠标右键点击所在页面，选择弹出菜单的刷新功能，容易出现重复提交问题。<br />
功能操作完成后，通过浏览器的后退键进行重复操作，容易出现重复提交问题。<br />
URL没有重定向，刷新页面出现重复提交问题。<br />
某功能键反应时间延迟时，在短时间内重复点击该功能键，容易出现重复提交问题；<br />
某些用户习惯双击按钮，某些用户错误地点了两次按钮，某些鼠标出现故障，导致单击变成双击，结果发生重复提交。</p>
<p>如果不加处理，这些请求都会被服务器处理，从而导致错误的结果。</p>
<p>struts的token确实能解决问题，但用户老是向我抱怨，为什么我不<br />
能用浏览器的回退按钮重新提交，我在其他网站上从没有这个问题，你如何解释？<br />
然后你还会发现部分操作是能够允许重复提交的。</p>
<p>8．如何锁定资源如记录：这是一个老大难问题了，为此还搞了不少东西出来。<br />
用 关键词 隔离级别 脏 锁定 去搜搜，就会发现，要解决这个问题是有方法的，但代价<br />
你愿意承担吗？开发代价，性能代价，可用性代价</p>
<p>9，如何防止浏览器记住数据，某些浏览器能够为每一个URL记住用户输入的数据，在某些情况下是危险的。比如我修改了某些数据，但由于某些原因我想刷新，此时数据已经被其他用户修改，但在浏览器里面你看到的是你修改的数据（你用刷新按钮也不能看到新数据）。如果你再次保存，你认为你没有修改数据，但数据已经被修改了。当页面是脚本动态生成的时候，这个问题更严重。</p>
<p>常发生在firefox等浏览器上。</p>
<p>10，如何防止或侦测客户修改浏览器设置，比如客户在打开页面之后关闭脚本功能。<br />
有时候甚至不是用户禁止脚本，而是么某些软件和插件，病毒甚至企业文化影响到用户设置。</p>
<p>11，回退问题，对于工作流熟悉的人对这个问题很清楚，某个操作节点如何回到启动点，如何回到上一节点，如何避免硬编码？ 比如一个页面被两个操作流所共享，此时安全验证是个问题，回退也许要仔细考虑。</p>
<p>12，校验问题，如何同时实现客户端和服务器端校验，客户端调用服务器端的校验功能。<br />
我已经在使用struts自带的apache commons validator，可是我不得不修改许多地方才能<br />
用起来。比如我有些隐藏字段需要校验。但commons validator居然使用focus语句，导致出错。<br />
这是小的bug，但更麻烦的是部分服务器端的校验没有办法在客户端实现。比如validwhen<br />
又如，某些校验需要查询数据库，所以我想要的校验应该是能够被ajax 调用，这样<br />
校验在客户端和服务器端完全一样，但这样客户端校验还有必要吗，我们原来用客户端校验<br />
是看中他的校验响应快，不给服务器加负担。所以我又迷茫了。</p>
<p>13，如何防止数据伪造，如何防止客户使用特殊工具和技术伪造数据提交到服务器。<br />
浏览器发送的数据都是遵循公开的标准，嗅探器等黑客工具可以随便地修改你的数据，<br />
还有一些神奇的浏览器插件可以任意修改数据。就算ssl也只能保障中间传输，客户端无法控制。你还认为你的隐藏字段是安全的吗？你还认为你的select只有那几个选项吗？</p>
<p>14， 如何追踪定位错误，如何处理异常？<br />
在一个运行的系统里，你如何知道哪个数据产生了这个错误？多个用户的日志绞缠在一起<br />
如何组织？<br />
15，如何在两个操作之间传递大量数据，尤其是非存储数据。<br />
比如分页数据（按什么列排序的第几页，过滤条件）一般是不存储到数据库的，但在某些时候必须传递到下一个页面，session 也不是最终解决方案。<br />
16， 带安全控制的断点续传的上载 和下载<br />
甚至服务器端恐怕也要装点什么，这个可是许多企业的忌讳<br />
17，分布式环境的特殊处理，<br />
18，如何提高开发效率？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onlymarshall.com/2006/06/08/%e5%bc%80%e5%8f%91web%e5%ba%94%e7%94%a8%e9%9a%be%e4%ba%8e%e4%b8%8a%e9%9d%92%e5%a4%a9web%e5%bc%80%e5%8f%91%e5%8d%81%e5%85%ab%e9%9a%be/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Macromedia的历史</title>
		<link>http://www.onlymarshall.com/2006/05/27/macromedia%e7%9a%84%e5%8e%86%e5%8f%b2/</link>
		<comments>http://www.onlymarshall.com/2006/05/27/macromedia%e7%9a%84%e5%8e%86%e5%8f%b2/#comments</comments>
		<pubDate>Sat, 27 May 2006 14:44:00 +0000</pubDate>
		<dc:creator>marshall</dc:creator>
				<category><![CDATA[csdn导入]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[转载]]></category>

		<guid isPermaLink="false">http://www.onlymarshall.com/?p=65</guid>
		<description><![CDATA[转自http://blog.csdn.net/JavaProgramers Macromedia被并购进入Adobe的尘埃已经落定，新的产品，新的策略将在2006年产生。我相信一定有不少人对Macromedia公司的历史颇感兴趣，在这里，我为大家贴出一个完整无误的Macromedia历史和发展进程，相信能够帮助不少人了解Macromedia这家公司是如何发展并推动Web进程的，让我们记住曾经的Web发展之路上，曾经有过一个出色的公司叫作Macromedia。 1984年，美国芝加哥，MacroMind公司成立。公司致力于高质量的音频和视频和动画在艺术领域的软件开发。产品包括MacroMind3D，Action!，和VideoWorks（这就是以后的Director）。&#8212;那年我7岁，我发现我和数字7很有缘，:D 1987年，MacroMind搬迁，从芝加哥搬到旧金山410 Townsend Street，位于MultiMedia Gulch地区。同年，VideoWorks 2.0发布，此外，另外2家公司Paracomp和Authorware成立，Paracomp主要产品是Swivel3D，Authorware的产品则和他的名字相同。 1988年，VideoWorks新版本更名为Director 1.0发布。如此推算，VideoWorks应该是世界上最老牌的多媒体动画创作软件之一。 1991年，MacroMind收购Farallon软件公司，同时获得该公司的SoundEdit等一系列的工具软件集合。同年，MacroMind和Paracomp公司合并，推出的产品有MacroMind-Paracomp TitleMaker，MacroMind-Paracomp Magic，Paracomp DrawTools for MacDraw，Paracomp SwivelArt和MacroMind Three-D 1.2。 1992年，MacroMind，Paracomp和Authorware三家公司合并变成为Macromedia。同时，调整产品线，发布了ModelShopII，MediaMaker 1.5，MacroModel 1.0，Action 2。 1993年，Macromedia Nasdaq上市，股票代码MACR，发行222万普通流通股，每股12美金。 1995年，Macromedia推出名为“Wheel”车轮计划，主要是面向Director而言。同年收购Altsys公司，FreeHand和Fontographer成为公司产品线的成员。210万股票被售出，第一次股票拆分计划公布。这一年，产品有Shockwave Player，XRes1.0，SoundEdit 16 2，Fontographer，FreeHand 5，Authorware 3和DeckII。 1996年，公司年营业额达到1亿。Shockwave Player被下载1500万次。 1997年，Macromedia收购FutureWave公司，FutureSplash软件更名为Flash。Dreamweaver 1.0发布。同年还推出HomeSite 1.0和Flash 2.0。 1998年，Dreamweaver诞生仅1年就售出10万套。紧接着，Flash也售出10万套。同年，Nescape宣布浏览器绑定Flash Player。 1999年，Flash4的播放器全面开始普及，制作Flash不再需要透过AfterShock发布。同年，Flash Player下载次数达到1亿。Macromedia也被财富杂志评选入全球软件50强。 2000年，Flash5发布，初步包含面向对象的语法开发方式。Flash的打印功能实现。 2001年，Macromedia收购Allaire，ColdFusion和JRun纳入旗下。同年，3D Shockwave Player发布。 2002年，发布MX产品线，Macromedia诞生10年。同时，Flash开始向Mobile进军，而Generator软件功能并入ColdFusion。 2003年，收购eHelp公司，RobeHelp和RoboDemo（后续的Captivate）并入产品线。收购Presedia公司，Breeze Solution诞生。发布Studio MX 2004产品。 2004年，Flex 1.0发布，Flash Lite 1.0和1.1产生。 2005年，Flash [...]]]></description>
			<content:encoded><![CDATA[<p>转自<a href="http://blog.csdn.net/JavaProgramers">http://blog.csdn.net/JavaProgramers</a></p>
<p>Macromedia被并购进入Adobe的尘埃已经落定，新的产品，新的策略将在2006年产生。我相信一定有不少人对Macromedia公司的历史颇感兴趣，在这里，我为大家贴出一个完整无误的Macromedia历史和发展进程，相信能够帮助不少人了解Macromedia这家公司是如何发展并推动Web进程的，让我们记住曾经的Web发展之路上，曾经有过一个出色的公司叫作Macromedia。</p>
<ul>
<li>1984年，美国芝加哥，MacroMind公司成立。公司致力于高质量的音频和视频和动画在艺术领域的软件开发。产品包括MacroMind3D，Action!，和VideoWorks（这就是以后的Director）。&#8212;<span style="color: #999999;">那年我7岁，我发现我和数字7很有缘，:D</span></li>
<li>1987年，MacroMind搬迁，从芝加哥搬到旧金山410 Townsend Street，位于MultiMedia Gulch地区。同年，VideoWorks 2.0发布，此外，另外2家公司Paracomp和Authorware成立，Paracomp主要产品是Swivel3D，Authorware的产品则和他的名字相同。</li>
<li>1988年，VideoWorks新版本更名为Director 1.0发布。如此推算，VideoWorks应该是世界上最老牌的多媒体动画创作软件之一。</li>
<li>1991年，MacroMind收购Farallon软件公司，同时获得该公司的SoundEdit等一系列的工具软件集合。同年，MacroMind和Paracomp公司合并，推出的产品有MacroMind-Paracomp TitleMaker，MacroMind-Paracomp Magic，Paracomp DrawTools for MacDraw，Paracomp SwivelArt和MacroMind Three-D 1.2。</li>
<li>1992年，MacroMind，Paracomp和Authorware三家公司合并变成为Macromedia。同时，调整产品线，发布了ModelShopII，MediaMaker 1.5，MacroModel 1.0，Action 2。</li>
<li>1993年，Macromedia Nasdaq上市，股票代码MACR，发行222万普通流通股，每股12美金。</li>
<li>1995年，Macromedia推出名为“Wheel”车轮计划，主要是面向Director而言。同年收购Altsys公司，FreeHand和Fontographer成为公司产品线的成员。210万股票被售出，第一次股票拆分计划公布。这一年，产品有Shockwave Player，XRes1.0，SoundEdit 16 2，Fontographer，FreeHand 5，Authorware 3和DeckII。</li>
<li>1996年，公司年营业额达到1亿。Shockwave Player被下载1500万次。</li>
<li>1997年，Macromedia收购FutureWave公司，FutureSplash软件更名为Flash。Dreamweaver 1.0发布。同年还推出HomeSite 1.0和Flash 2.0。</li>
<li>1998年，Dreamweaver诞生仅1年就售出10万套。紧接着，Flash也售出10万套。同年，Nescape宣布浏览器绑定Flash Player。</li>
<li>1999年，Flash4的播放器全面开始普及，制作Flash不再需要透过AfterShock发布。同年，Flash Player下载次数达到1亿。Macromedia也被财富杂志评选入全球软件50强。</li>
<li>2000年，Flash5发布，初步包含面向对象的语法开发方式。Flash的打印功能实现。</li>
<li>2001年，Macromedia收购Allaire，ColdFusion和JRun纳入旗下。同年，3D Shockwave Player发布。</li>
<li>2002年，发布MX产品线，Macromedia诞生10年。同时，Flash开始向Mobile进军，而Generator软件功能并入ColdFusion。</li>
<li>2003年，收购eHelp公司，RobeHelp和RoboDemo（后续的Captivate）并入产品线。收购Presedia公司，Breeze Solution诞生。发布Studio MX 2004产品。</li>
<li>2004年，Flex 1.0发布，Flash Lite 1.0和1.1产生。</li>
<li>2005年，Flash Cast被NTT Docomo采用成为3G Portal Solution。Nokia签订下Flash Lite大批量授权许可。同年，发布Studio8。Adobe收购Macromedia公司完成。</li>
</ul>
<p>上述就是Macromedia公司的发展历程。</p>
<p><![CDATA[转自<a href="http://blog.csdn.net/JavaProgramers" mce_href="http://blog.csdn.net/JavaProgramers">http://blog.csdn.net/JavaProgramers</a></p>
<p>Macromedia被并购进入Adobe的尘埃已经落定，新的产品，新的策略将在2006年产生。我相信一定有不少人对Macromedia公司的历史颇感兴趣，在这里，我为大家贴出一个完整无误的Macromedia历史和发展进程，相信能够帮助不少人了解Macromedia这家公司是如何发展并推动Web进程的，让我们记住曾经的Web发展之路上，曾经有过一个出色的公司叫作Macromedia。</p>
<ul>
<li>1984年，美国芝加哥，MacroMind公司成立。公司致力于高质量的音频和视频和动画在艺术领域的软件开发。产品包括MacroMind3D，Action!，和VideoWorks（这就是以后的Director）。 -<font color="#999999">那年我7岁，我发现我和数字7很有缘，:D</font></li>
<li>1987年，MacroMind搬迁，从芝加哥搬到旧金山410 Townsend Street，位于MultiMedia Gulch地区。同年，VideoWorks 2.0发布，此外，另外2家公司Paracomp和Authorware成立，Paracomp主要产品是Swivel3D，Authorware的产品则和他的名字相同。</li>
<li>1988年，VideoWorks新版本更名为Director 1.0发布。如此推算，VideoWorks应该是世界上最老牌的多媒体动画创作软件之一。</li>
<li>1991年，MacroMind收购Farallon软件公司，同时获得该公司的SoundEdit等一系列的工具软件集合。同年，MacroMind和Paracomp公司合并，推出的产品有MacroMind-Paracomp TitleMaker，MacroMind-Paracomp Magic，Paracomp DrawTools for MacDraw，Paracomp SwivelArt和MacroMind Three-D 1.2。</li>
<li>1992年，MacroMind，Paracomp和Authorware三家公司合并变成为Macromedia。同时，调整产品线，发布了ModelShopII，MediaMaker 1.5，MacroModel 1.0，Action 2。</li>
<li>1993年，Macromedia Nasdaq上市，股票代码MACR，发行222万普通流通股，每股12美金。</li>
<li>1995年，Macromedia推出名为&ldquo;Wheel&rdquo;车轮计划，主要是面向Director而言。同年收购Altsys公司，FreeHand和Fontographer成为公司产品线的成员。210万股票被售出，第一次股票拆分计划公布。这一年，产品有Shockwave Player，XRes1.0，SoundEdit 16 2，Fontographer，FreeHand 5，Authorware 3和DeckII。</li>
<li>1996年，公司年营业额达到1亿。Shockwave Player被下载1500万次。</li>
<li>1997年，Macromedia收购FutureWave公司，FutureSplash软件更名为Flash。Dreamweaver 1.0发布。同年还推出HomeSite 1.0和Flash 2.0。</li>
<li>1998年，Dreamweaver诞生仅1年就售出10万套。紧接着，Flash也售出10万套。同年，Nescape宣布浏览器绑定Flash Player。</li>
<li>1999年，Flash4的播放器全面开始普及，制作Flash不再需要透过AfterShock发布。同年，Flash Player下载次数达到1亿。Macromedia也被财富杂志评选入全球软件50强。</li>
<li>2000年，Flash5发布，初步包含面向对象的语法开发方式。Flash的打印功能实现。</li>
<li>2001年，Macromedia收购Allaire，ColdFusion和JRun纳入旗下。同年，3D Shockwave Player发布。</li>
<li>2002年，发布MX产品线，Macromedia诞生10年。同时，Flash开始向Mobile进军，而Generator软件功能并入ColdFusion。</li>
<li>2003年，收购eHelp公司，RobeHelp和RoboDemo（后续的Captivate）并入产品线。收购Presedia公司，Breeze Solution诞生。发布Studio MX 2004产品。</li>
<li>2004年，Flex 1.0发布，Flash Lite 1.0和1.1产生。</li>
<li>2005年，Flash Cast被NTT Docomo采用成为3G Portal Solution。Nokia签订下Flash Lite大批量授权许可。同年，发布Studio8。Adobe收购Macromedia公司完成。</li>
</ul>
<p>上述就是Macromedia公司的发展历程。</p>
<p>]]&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onlymarshall.com/2006/05/27/macromedia%e7%9a%84%e5%8e%86%e5%8f%b2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<br />
<b>Warning</b>:  fsockopen() has been disabled for security reasons in <b>/home/onlymars/public_html/wp/wp-includes/class-snoopy.php</b> on line <b>1148</b><br />

