﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-ipointer</title><link>http://www.cnblogs.com/ipointer/</link><description>给我最爱的宝宝</description><language>zh-cn</language><lastBuildDate>Thu, 24 Jul 2008 08:04:35 GMT</lastBuildDate><pubDate>Thu, 24 Jul 2008 08:04:35 GMT</pubDate><ttl>60</ttl><item><title>对Activity副本的再理解</title><link>http://www.cnblogs.com/ipointer/archive/2008/07/24/1250400.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Thu, 24 Jul 2008 04:21:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2008/07/24/1250400.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/1250400.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2008/07/24/1250400.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/1250400.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/1250400.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在看本文之前，先看WF大牛WXWinter的博文：<a href="http://www.cnblogs.com/foundation/archive/2008/06/05/1214783.html">http://www.cnblogs.com/foundation/archive/2008/06/05/1214783.html</a>，本人在看他的博文后，觉得还有一些点没有讲透，想通后，写下此文。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;重提一下WXWinter的博文：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;While与Replicator可以重复执行其子Activity，While与Replicator在每次重复使用Activity时，并不是将其重置到初始状态。而是克隆原始Activity，每个克隆的Activity都单独进行管理。不会干扰其他克隆的Activity。这些克隆的Activity每一个都要有自身的 AEC 来管理状态。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这段描述没有问题，有两点还没说清楚：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、克隆的Activity的可见性。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、在什么时候克隆Activity。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们从WXWinter的例二入手，例二没有达到预期目的的根本原因就是克隆的Activity的可见性。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例一中是在流程中给活动实例的MyProperty属性做++操作的，在流程中只能看到真正的Activity1的活动实例，是不可能看到活动的副本的，所以这里++操作就是针对真正的Activity1的活动实例的。而例二中，由于将给活动实例的MyProperty属性做++操作封到了ActivityLibrary里面，运行时++操作是针对活动的副本进行的，所以根本不会影响到真正的活动实例。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们经常要封ActivityLibrary的同志就要注意了，必须使用this.Parent.GetActivityByName(this.Name)才能取到真正的活动实例，GetActivityByName的作用是根据指定的类型名返回当前活动及其子运行活动的活动实例。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;问题二什么时候克隆Activity，在串行情况下，在每次执行序列之前克隆Activity，证据是在副本活动中用一下代码：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private void codeActivity1_ExecuteCode(object sender, EventArgs e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Activity1 a1 = this.Parent.GetActivityByName(this.Name) as Activity1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a1.MyProperty++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(MyProperty);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以发现副本的MyProperty值也是变化的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在并行情况下就是在最初全部克隆好了。</p>
<img src ="http://www.cnblogs.com/ipointer/aggbug/1250400.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41275/" target="_blank">[新闻]Mozilla将于本周五发布Firefox 3.1第一个预览版</a>]]></description></item><item><title>Windows Workflow Foundation中实现人工活动的demo，按照XPDL规范的实现</title><link>http://www.cnblogs.com/ipointer/archive/2008/07/17/1245397.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Thu, 17 Jul 2008 11:04:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2008/07/17/1245397.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/1245397.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2008/07/17/1245397.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/1245397.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/1245397.html</trackback:ping><description><![CDATA[在XPDL规范中，一个人工参与的活动有以下特性：活动任务的多实例（根据活动上指定的参与者，分配活动任务，活动任务我们称为工作项），工作项的分配策略（ALL所有参与者分配和Radom随机挑选分配，当然还有更多的资源模式，因为是是demo就不实现了），活动的完成策略（ALL所有工作项完成活动才完成和ANY任意工作项完成即完成），工作项执行模式（并行和串行）。<br />
开始我的描述，下图是封好的组合活动，整个组合活动暴露的属性有：参与者（是个集合，可以自己定义组织模型接口，用户、岗位、用户组、组织等）、分配策略、完成策略、执行模式、预警规则等。<br />
<img height="589" alt="" src="http://www.cnblogs.com/images/cnblogs_com/ipointer/HumanActivity.JPG" width="421" border="0" /><br />
我们一一来看组合活动中的每个活动的作用：<br />
1、FindParticipant活动传入参与者列表和分配策略，经过对策略的不同处理（动态的参与者需要从上下文中获取），返回最终确定的参与者。<br />
2、ApprovalReplicator活动是ReplicatorActivity，这个是实现活动任务多实例的关键。将计算获得的参与者列表作为ReplicatorActivity的InitData，参与者列表的数量会决定整个ReplicatorActivity块的执行次数，每次会起单独的线程（通过观察ActivityExecutionContext的ID与父活动的不一样得知，异步线程的Context都是自己管理的），每个线程的初始数据即为具体的一个参与者。根据工作项执行模式是并行的还是串行的来设置ReplicatorActivity的ExecutionType属性。ReplicatorActivity的四个事件都很有用，为了初始数据和支持策略的实现，这里不赘述。再多说一句，WF设计器好像对IList类型的属性支持不好，实现中我都是手写代码绑定的这类参数，应该是个Bug。<br />
3、SingleApproval是封的组件活动，因为ReplicatorActivity里只能包含一个活动，所以必须封一下。<br />
4、CreateWorkItem根据线程拥有的参与者，在数据库中创建工作项。工作项概念在WF中没有，估计WF就不是为人工活动设计的。我们就将其设计为业务数据，可以在数据库部署上与WF默认提供的数据库分离。<br />
5、LintenForApproval+WaitComplete配合实现流程对用户完成工作项的等待。这里要注意的关键点是CorrelationToken的运用，目的是分清楚来自与宿主程序的完成工作项的事件到底要发给哪个线程。WF的这个设计还是与Biztalk一致的，需要有创建CorrelationToken的活动（本例中是CreateWorkItem），后续的活动（本例中是WaitComplete）标记为Follow这个CorrelationToken。CorrelationToken的OwnerActivityName的设置也是很关键的点，这种多线程的场景中，如果这个属性设置为SingleApproval就坏事了，这样每个线程的CorrelationToken还是区分不出来，这里的技巧是设为/Parent，由运行时指定为父活动，WF引擎是支持的。还有一点要提的是，需要使用CorrelationToken的这种活动引用的用户接口必须加上<font face="Verdana">CorrelationParameter</font>特性，这个Lab中都有，不赘述了。<br />
6、UserSolve活动就是根据用户完成工作项的执行情况（宿主程序在事件参数中传入用户执行结果）。<br />
7、DelayActivity根据传入的预警信息生成等待的时间，DefaultSolve即完成预警信息中指定的动作。<br />
8、还差一点就是完成策略还没有提到，这个是通过ReplicatorActivity的UntilCondition来实现的，只要这个条件计算的结果是true，那么整个ReplicatorActivity就结束，而丢弃其他未完成的线程，每个线程的结束都会触发这个条件计算的执行。剩下的策略规则就不难实现了，根据不同的场景堆代码吧。<br />
<br />
以上的组合活动来实现人工活动的要点有：<br />
1、处理好ReplicatorActivity活动<br />
2、Listen活动+HandlerExternalEvent活动的配合，CorrelationToken的设置<br />
完成这个demo后还觉得这样实现太过于啰嗦，真想用代码直接写个HumanActivity。对于上面的两个关键点的用代码实现的设想：<br />
1、ReplicatorActivity，我们用代码根据参与者列表起几个Thread的问题。<br />
2、Listen活动+HandlerExternalEvent活动，用WF的消息队列+书签的方式就可以搞定了，这个有疑问请看我前一篇博文。CorrelationToken我们写代码想这么搞怎么搞，哈哈！ 
 <img src ="http://www.cnblogs.com/ipointer/aggbug/1245397.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41274/" target="_blank">[新闻]瑞星将向个人用户免费1年</a>]]></description></item><item><title>WF消息队列的使用</title><link>http://www.cnblogs.com/ipointer/archive/2008/07/17/1245297.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Thu, 17 Jul 2008 08:32:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2008/07/17/1245297.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/1245297.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2008/07/17/1245297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/1245297.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/1245297.html</trackback:ping><description><![CDATA[<div style="layout-grid:  15.6pt none">
<p><font face="宋体" size="2"><span style="font-size: 10.5pt; font-family: 宋体">工作流队列用于在宿主程序或工作流外部服务与工作流中的活动之间传递消息。</span></font><font face="Verdana"><span style="font-family: Verdana">WF</span></font><font face="宋体"><span style="font-family: 宋体">本质论里面写的很含糊，通过下面的例子可以很好的理解工作流队列的使用。</span></font></p>
<p><font face="宋体" size="2"><span style="font-size: 10.5pt; font-family: 宋体">例子主要功能是，一流程运行到</span></font><font face="Verdana"><span style="font-family: Verdana">ReadLine</span></font><font face="宋体"><span style="font-family: 宋体">活动处，等待用户在控制台的输入，如果用户没有输入，则流程会钝化，有一个书签（其实就是对事件的处理方法）会加到工作流队列的</span></font><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">QueueItemAvailable</span></font><font face="宋体"><span style="font-family: 宋体">事件上。</span></font></p>
<p><font face="宋体" size="2"><span style="font-size: 10.5pt; font-family: 宋体">下面首先看</span></font><font face="Arial"><span style="font-family: Arial">ReadLine</span></font><font face="宋体"><span style="font-family: 宋体">这个活动，解释看注释。</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">using System;</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">using System.Workflow.ComponentModel;</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">using System.Workflow.Runtime;</span></font></p>
<p><font face="Arial" size="1">&nbsp;</font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">namespace EssentialWF.Activities {</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp; public class ReadLine : Activity {</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp; private string text;</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp; public string Text {</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get { return this.text; }</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp; }</span></font></p>
<p><font face="Arial" size="1">&nbsp;</font></p>
<p style="text-indent: 18pt"><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">protected override void Initialize(IServiceProvider provider) {</span></font></p>
<p style="text-indent: 18pt"><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">//</span></font><font face="宋体" size="1"><span style="font-size: 9pt; font-family: 宋体">活动初始化时就用活动名字创建，不用担心多个实例间的重名情况，因为消息队列是跟着流程实例走的</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WorkflowQueuingService qService =(WorkflowQueuingService)provider.GetService(typeof(WorkflowQueuingService));</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!qService.Exists(this.Name))</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; qService.CreateWorkflowQueue(this.Name, true);</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp; }</span></font></p>
<p><font face="Arial" size="1">&nbsp;</font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp; protected override ActivityExecutionStatus Execute(ActivityExecutionContext context) {</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WorkflowQueuingService qService = context.GetService&lt;WorkflowQueuingService&gt;();</span></font></p>
<p><font face="Arial" size="1">&nbsp;</font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span></font><font face="宋体" size="1"><span style="font-size: 9pt; font-family: 宋体">尝试执行获取用户输入，如果有用户输入，</span></font><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">Dequeue</span></font><font face="宋体" size="1"><span style="font-size: 9pt; font-family: 宋体">方法就能获取的到</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//</span></font><font face="宋体" size="1"><span style="font-size: 9pt; font-family: 宋体">并将活动的执行状态置为结束</span></font></p>
<p style="text-indent: 21pt"><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;WorkflowQueue queue = qService.GetWorkflowQueue(Name);</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (queue.Count &gt; 0) {</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.text = (string)queue.Dequeue();</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ActivityExecutionStatus.Closed;</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></font></p>
<p><font face="Arial" size="1">&nbsp;</font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;//</span></font><font face="宋体" size="1"><span style="font-size: 9pt; font-family: 宋体">尝试执行没有成功，给队列的</span></font><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">QueueItemAvailable</span></font><font face="宋体" size="1"><span style="font-size: 9pt; font-family: 宋体">事件（此事件会在消息入队列时触发）加上处理方法</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;//</span></font><font face="宋体" size="1"><span style="font-size: 9pt; font-family: 宋体">并将活动的执行状态置为运行中</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queue.QueueItemAvailable += this.ContinueAt;</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ActivityExecutionStatus.Executing;</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp; }</span></font></p>
<p><font face="Arial" size="1">&nbsp;</font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span></font><font face="宋体" size="1"><span style="font-size: 9pt; font-family: 宋体">下面都很好理解了，不说了</span></font></p>
<p><font face="Arial" size="1">&nbsp;</font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp; void ContinueAt(object sender, QueueEventArgs e) {</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActivityExecutionContext context = sender as ActivityExecutionContext;</span></font></p>
<p><font face="Arial" size="1">&nbsp;</font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WorkflowQueuingService qService = context.GetService&lt;WorkflowQueuingService&gt;();</span></font></p>
<p><font face="Arial" size="1">&nbsp;</font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WorkflowQueue queue = qService.GetWorkflowQueue(Name);</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.text = (string)queue.Dequeue();</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context.CloseActivity();</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp; }</span></font></p>
<p><font face="Arial" size="1">&nbsp;</font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp; protected override void Uninitialize(IServiceProvider provider) {</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WorkflowQueuingService qService = (WorkflowQueuingService)provider.GetService(typeof(WorkflowQueuingService));</span></font></p>
<p><font face="Arial" size="1">&nbsp;</font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (qService.Exists(this.Name))</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; qService.DeleteWorkflowQueue(this.Name);</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp;&nbsp;&nbsp; }</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">&nbsp; }</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">}</span></font></p>
<p><font face="Arial" size="1">&nbsp;</font></p>
<p><font face="宋体" size="1"><span style="font-size: 9pt; font-family: 宋体"><span style="font-size: 36pt; font-family: 宋体"><font style="font-family: " face="宋体" size="1"><span style="font-size: 9pt; font-family: ">再看我们的宿主程序怎么和</span></font><font style="font-family: " face="Arial" size="1"><span style="font-size: 9pt; font-family: ">ReadLine</span></font><font style="font-family: " face="宋体" size="1"><span style="font-size: 9pt; font-family: ">活动配合。</span></font></span></span></font></p>
<p><font face="Arial" size="1">&nbsp;</font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">string s = Console.ReadLine();</span></font></p>
<p><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">instance.EnqueueItem(&#8220;rl1&#8221;,s,null,null);//</span></font><font face="宋体" size="1"><span style="font-size: 9pt; font-family: 宋体">这行代码就是向队列中加入消息，</span></font><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">rl1</span></font><font face="宋体" size="1"><span style="font-size: 9pt; font-family: 宋体">是活动的名称，</span></font><font face="Arial" size="1"><span style="font-size: 9pt; font-family: Arial">s</span></font><font face="宋体" size="1"><span style="font-size: 9pt; font-family: 宋体">是消息的数据信息，后两个参数是用于传递消息后接受反馈的通知。</span></font></p>
</div>
<img src ="http://www.cnblogs.com/ipointer/aggbug/1245297.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41274/" target="_blank">[新闻]瑞星将向个人用户免费1年</a>]]></description></item><item><title>查数据库死锁的实际例子</title><link>http://www.cnblogs.com/ipointer/archive/2008/06/05/1214005.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Wed, 04 Jun 2008 16:23:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2008/06/05/1214005.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/1214005.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2008/06/05/1214005.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/1214005.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/1214005.html</trackback:ping><description><![CDATA[<p>一个项目上的数据库宕掉了，开始非说是我的工作流造成的。我也不是数据库的专家，只能硬着头皮边学边用的查了，怀疑是数据库死锁，就沿着这个方向前进。
<p>首先sa登录查询分析器，执行Dbcc traceon(1204, 3605, -1)，其中参数1204代表返回参与死锁的锁的类型以及当前受影响的命令，3605代表trace到的信息必须记录到日志中，-1代表返回当前所有打开的跟踪标记的状态。有几点要注意，1、事件探查器是跟不出死锁的sql的，因为它只是记录执行过的sql，而这些在事务里面死锁的sql都会被回滚的；2、只有在打开这些标记后数据库才会记录日志，打开这些标记会影响数据库性能，记得用完了使用Dbcc traceoff（标记号）关掉。
<p>接着就是再现这个死锁了，让实施人员在远程找5、6个人同时点这个功能，嘿嘿，不错，一下子就出来了。将数据库日志发过来，一般在Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\LOG\ERRORLOG下。打开文件仔细看发现下面的日志。
<p>2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Node:1
<p>2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RID: 5:1:6815:21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CleanCnt:3 Mode:X Flags: 0x2<br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Grant List 2:<br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Owner:0x3711E420 Mode: X&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Flg:0x0 Ref:1 Life:02000000 SPID:59 ECID:0 XactLockInfo: 0x387A26FC<br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SPID: 59 ECID: 0 Statement Type: DELETE Line #: 133<br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Input Buf: RPC Event: Proc [Database Id = 5 Object Id = 1254295528]<br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Requested By: <br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResType:LockOwner Stype:'OR'Xdes:0x533EBC80 Mode: S SPID:67 BatchID:0 ECID:0 TaskProxy:(0x1F092374) Value:0x2962ae40 Cost:(0/0)<br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Node:2
<p>2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KEY: 5:72057594056212480 (fc0199b9be7a) CleanCnt:2 Mode:S Flags: 0x0<br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Grant List 2:<br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Owner:0x2028AD80 Mode: S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Flg:0x0 Ref:1 Life:00000000 SPID:67 ECID:0 XactLockInfo: 0x533EBCA4<br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SPID: 67 ECID: 0 Statement Type: SELECT Line #: 1<br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Input Buf: RPC Event: Proc [Database Id = 5 Object Id = 484053356]<br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Requested By: <br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResType:LockOwner Stype:'OR'Xdes:0x387A26D8 Mode: X SPID:59 BatchID:0 ECID:0 TaskProxy:(0x576FE374) Value:0x1eb9ad20 Cost:(0/84)<br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Victim Resource Owner:<br />
2008-05-31 10:10:46.20 spid5s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResType:LockOwner Stype:'OR'Xdes:0x533EBC80 Mode: S SPID:67 BatchID:0 ECID:0 TaskProxy:(0x1F092374) Value:0x2962ae40 Cost:(0/0)
<p>Node1（SPID：59）拥有了一个资源的排他锁Mode: X ，而需要申请另一个资源的共享锁Mode: S，Node2（SPID：67）拥有了后一个资源的共享锁，请求前一个资源的排他锁。根据学校里的零星知识，还是能明白这个道理的。照理说这种情况是不会死锁的，但是如果在事务里，共享锁也会在事务结束以后才释放。
<p>联机丛书上有一些信息可以利用来看这段日志。
<h6>类型列</h6>
<p>"类型"列显示当前锁定的资源类型。
<p>资源类型<br />
描述
<p>RID<br />
用于锁定表中的一行的行标识符。
<p>KEY<br />
索引中的行锁。用于保护可串行事务中的键范围。
<p>PAG<br />
数据或索引页。
<p>EXT<br />
相邻的八个数据页或索引页构成的一组。
<p>TAB<br />
包括所有数据和索引在内的整个表。
<p>DB<br />
数据库。
<h6>资源列</h6>
<p>"资源"列提供有关正被锁定资源的信息。
<p>资源类型<br />
描述
<p>RID<br />
表内已锁定行的行标识符。行由 fileid:page:rid 组合进行标识，其中，rid 是页中的行标识符。
<p>KEY<br />
SQL Server 内部使用的十六进制数字。
<p>PAG<br />
页码。页由 fileid:page 组合进行标识，其中，fileid 是 <strong>sysfiles</strong> 表中的 <strong>fileid</strong>，而 page 是该文件内的逻辑页码。
<p>EXT<br />
正被锁定的扩展盘区中的第一个页码。页由 fileid:page 组合进行标识。
<p>TAB<br />
由于 <strong>ObjId</strong> 列已包含表的对象 ID，所以没有提供任何信息。
<p>DB<br />
由于 <strong>dbid</strong> 列已包含数据库的数据库 ID，所以没有提供任何信息。
<p>在 <strong>sp_lock</strong> 的结果集内，锁定的 RID 资源类型中的资源描述为 1:1225:2。这表明在 fileid 1 内、页码为 1225 的页中、行标识符为 2 的行上应用了锁。
<p>最关键的信息我认为是
<p>[Database Id = 5 Object Id = 1254295528]和[Database Id = 5 Object Id = 484053356]<br />
指明了加锁的两个对象。
<p>select&nbsp; db_name(5)&nbsp; 结果为 cwbase_zclzj<br />
连接 cwbase_zclzj帐套，<br />
select object_name(484053356)&nbsp; 结果为&nbsp; ： erp_LS_BillCodeRule_GenerateNewBillCode<br />
select object_name(1254295528)&nbsp; 结果为： erp_LS_BillFlowNoRecords_NewRecordSave
<p>原来是两个存储过程搞得鬼，在生成单据编号的时候出现了死锁，因为两者是放在同一个事物中，也就验证了我们上面的猜想。简单的处理办法是不要放到同一个事物中，其他的办法就让负责维护的同事去管吧。
<p>就写到这里，其实日志里面的大部分咚咚还是看不懂，等待高人给予解释。如果分析中有什么不对的，也请各位回复指出，我也进一步学习一下。谢谢！</p>
<img src ="http://www.cnblogs.com/ipointer/aggbug/1214005.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41273/" target="_blank">[新闻]中国互联网历史上最伟大的产品TOP10（二）</a>]]></description></item><item><title>喜欢使用VMware的.net程序员要注意呀（Visual Studio启动不了的问题）</title><link>http://www.cnblogs.com/ipointer/archive/2008/05/27/1208276.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Tue, 27 May 2008 04:09:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2008/05/27/1208276.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/1208276.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2008/05/27/1208276.html#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/1208276.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/1208276.html</trackback:ping><description><![CDATA[<font face="Verdana">VMware在安装的时候默认会在VS中装插件，VS启动时会去加载这些插件。<br />
VMware一共有四个服务，我们为了启动速度快一点，经常会停掉这些服务。而VS启动加载插件时如果这些服务是停止的，那么加载过程就会停在那里，就像我们看到的一直停留在启动画面的情况。<br />
解决方法：1、将这些服务的启动类型设为自动。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、将注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\AddIns\VMDebugger.Connect目录下把LoadBehavior项改为0，反正我们基本不会去用到这些插件。<img src="http://www.cnblogs.com/Emoticons/msn/regular_smile.gif"  alt="" />&nbsp;&nbsp;</font>
<img src ="http://www.cnblogs.com/ipointer/aggbug/1208276.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41271/" target="_blank">[新闻]盖茨官方否认天价租楼看奥运 纯属地产商炒作</a>]]></description></item><item><title>编译器错误信息: CS1595: 已在多处定义“ ”；一种可能出现的情况</title><link>http://www.cnblogs.com/ipointer/archive/2008/03/29/1129218.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Sat, 29 Mar 2008 13:43:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2008/03/29/1129218.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/1129218.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2008/03/29/1129218.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/1129218.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/1129218.html</trackback:ping><description><![CDATA[先说一下网上经常能搜到的情况。<br />
<font face="Verdana"><a href="http://liubiqu.cnblogs.com/archive/2004/11/30/71025.aspx">http://liubiqu.cnblogs.com/archive/2004/11/30/71025.aspx</a></font> 这个说了两种情况，方法 1：在 C# 编译器定义中包括 /nostdlib 选项；方法 2：为 ASPNET 帐户授予列出权限。可以参见一下。<br />
还有就是说把命名空间改掉，<font face="Verdana">http://www.cnblogs.com/zgqys1980/archive/2006/08/16/478414.html</font><br />
但对于我的情况都不适用。<br />
<br />
我的情况是运行时ieWebControl出现多处定义，并不是编译时。<br />
开始想不通，这个多处定义是怎么来的，做了一些尝试，如：重装这个控件，删除ASP.NET的临时文件，重启iis，都不管用。<br />
最后还是着眼于ASP.NET的查找dll的方式，大家都知道ASP.NET运行时的dll都是在临时文件夹（%Windir%\microsoft.net\framework\{<font face="Verdana">version</font>}）,而这里面的dll都是从GAC和Web应用程序根目录下Copy过来的。这样就想到是不是这两个地方都有这个dll呢，证实是这样的，而且版本还不一样，这就造成了运行时的多处定义。ps：Web程序和WinForm的加载dll的方式不一样，WinForm肯定是首先找GAC，再找运行目录或根据配置文件找，所以WinForm程序运行时不会出现这样的问题。结果就是删掉Web应用程序根目录下的这个dll，就正确的，也不知道哪个鸟人拷进去的。<img src="http://www.cnblogs.com/Emoticons/msn/confused_smile.gif"  alt="" />
<img src ="http://www.cnblogs.com/ipointer/aggbug/1129218.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41270/" target="_blank">[新闻]2008年7月24日IT博客精选</a>]]></description></item><item><title>BPM业务场景分析（1）——内部交易合并开票</title><link>http://www.cnblogs.com/ipointer/archive/2008/03/25/1121385.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Tue, 25 Mar 2008 07:43:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2008/03/25/1121385.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/1121385.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2008/03/25/1121385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/1121385.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/1121385.html</trackback:ping><description><![CDATA[上篇的姊妹篇，上个系列是由工作流模式推业务场景，而本系列是由业务场景推运行时实现，都是头脑风暴的总结，不都是正确的，欢迎大家指正问题。<br />
<p>（1） 描述
<p>内部交易流程，完成了整个业务过程之后是集中开票的过程。开票操作是批操作，至于哪些放到一批里面，这个规则不确定，可能由人决定，可能是一个月开一次票。
<p>单纯的从业务发生发展角度来看，内部交易完成以后就应该是开票，以上的业务流程图很简单，如下：
<p><a href="file:///C:/Documents%20and%20Settings/zhujch/Application%20Data/Windows%20Live%20Writer/PostSupportingFiles/2aab81c2-10d5-467d-874f-cba1bd3c7d0b/clip_image002[3].gif"></a>&nbsp;<span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">&nbsp;<img height="54" alt="" src="http://www.cnblogs.com/images/cnblogs_com/ipointer/BPM1.JPG" width="224" border="0" /></v:shapetype></span>
<p>展开来看，想要达到的运行效果类似于下图：
<p><a href="file:///C:/Documents%20and%20Settings/zhujch/Application%20Data/Windows%20Live%20Writer/PostSupportingFiles/2aab81c2-10d5-467d-874f-cba1bd3c7d0b/clip_image004[4].gif"></a><img height="164" alt="" src="http://www.cnblogs.com/images/cnblogs_com/ipointer/BPM2.JPG" width="368" border="0" />&nbsp;
<p>（2） 解决方案
<p>a、 将内部交易和集中开票分到不同的业务流程上，本来这者就没有太紧密的联系，因此分到两个业务流程上也很自然。实现方式上，内部交易流程实例正常结束，之后由人参与决定哪些数据集中到一张发票上，激活开票流程。为了流程回溯，在数据汇合的时候应该记录内部交易流程和开票流程之间的关系。这种方案适用于内部交易流程和开票之间没有固定规则，需要人参与的场景。
<p>b、 用多实例模式中的在运行时都不确定执行次数的方式来实现这个流程，内部交易流程是一个可重复执行的活动块，这个活动重复执行的次数是在运行时外部事件决定的，可能是时间，也可能是人参与产生的事件。如，在某些管理方法中是月结的，即是由时间作为外部事件，下图描述了这种情况。
<p><a href="file:///C:/Documents%20and%20Settings/zhujch/Application%20Data/Windows%20Live%20Writer/PostSupportingFiles/2aab81c2-10d5-467d-874f-cba1bd3c7d0b/clip_image006[4].gif"></a><img height="105" alt="" src="http://www.cnblogs.com/images/cnblogs_com/ipointer/BPM3.JPG" width="528" border="0" />&nbsp;
<p>上图的流程的启动条件是每月月初，并使能重复执行Scope块活动，每个内部交易开始激活一个执行线程，此内部交易流程结束后，整个Scope块活动仍然处于使能状态，直到结束条件&#8216;时间到月末&#8217;成立，整个Scope块活动结束，然后进行集中开票。
<p>（3） 含义引申
<p>从上面的两个解决方案引出了一个问题，什么样的流程环节应该画在一个流程里面，而什么样的应该分开，这个是不是有选择的标准？是根据实施人员的经验来进行判断？那么两个不同水平的实施人员所定制的流程的可用性将有天壤之别。目前总结的标准或者说是策略包括：
<p>a、 流程描述、展现的含义是不是清楚。在特定流程定制工具的约束下，是不是能表达出流程的本义。
<p>b、 数据转换存不存在问题。在一个流程中，这个肯定不是问题，而分开了可能就有问题。
<p>c、 流程回溯、数据跟踪的方便性，同上面一条的道理。
<p>除了上述的选择标准的问题，还有一个问题不得忽视。如何保持流程之间的串联性，说白了就是如果是自动激活了流程，如何通知这个流程启动，而如果是由人激活的流程，那么如果去通知这个人。自然的联想就是通过消息中间件，其特征必须具备传达的可靠性、大吞吐量和回馈的准确性。微软的建议是使用Biztalk，那么就在这种假设下构建了如下的业务流程图。
<p><a href="file:///C:/Documents%20and%20Settings/zhujch/Application%20Data/Windows%20Live%20Writer/PostSupportingFiles/2aab81c2-10d5-467d-874f-cba1bd3c7d0b/clip_image008[4].gif"></a><img height="176" alt="" src="http://www.cnblogs.com/images/cnblogs_com/ipointer/BPM4.JPG" width="375" border="0" />&nbsp;
<p>上图表达了粗粒度的业务流程图，图中每个方块代表的是一个模块内的流程，而模块间的流程的互操作性由Biztalk的能力提供，主要依赖强大的Mapping做数据转换、抓取数据的BAM用来做数据跟踪、消息中间件的能力。
<p>另一个问题是业务流程划分的力度不能过小，如果还是以一个功能点为一个业务流程的话，又回到了目前功能驱动的情况了。</p>
<img src ="http://www.cnblogs.com/ipointer/aggbug/1121385.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41269/" target="_blank">[新闻]TOM在线与Joost正式组建合资公司</a>]]></description></item><item><title>高级工作流模式深入业务场景分析（1）——多路合并</title><link>http://www.cnblogs.com/ipointer/archive/2008/03/24/1119962.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Mon, 24 Mar 2008 08:59:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2008/03/24/1119962.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/1119962.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2008/03/24/1119962.html#Feedback</comments><slash:comments>25</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/1119962.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/1119962.html</trackback:ping><description><![CDATA[<p>开篇之作
<p>（1） 描述
<p>两条或更多的分支合并到单一的一条后续路径中，每一条使能进入分支都激活后续路径的一次执行线程。虽然多条分支在图形上是合并的，但是这个多路合并并不对这些分支激活的后续线程进行任何的同步。
<p>（2） 抽象模型描述
<p><a href="http://www.workflowpatterns.com/patterns/control/advanced_branching/wcp8_animation.php">多路合并的Flash动画</a>
<p><a href="http://tkfiles.storage.msn.com/y1pqjmKiMB65hyBlR6kDLzGkhlqVfvdRf4ueMMjUcHfH0q3N_xAhdih1tIkrxlhj9zLLdrSlQ-AALA?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="134" alt="clip_image002" src="http://tkfiles.storage.msn.com/y1pqjmKiMB65hyacxbxNO1yYkNJ72nYCTAU1mWOw6okoa2mVSh8jRtbSZu0DqA2Gua-3raIl66_N1U?PARTNER=WRITER" width="456" border="0" /></a>
<p>上图中，B和C是多路选择后的分支，这样的分支可以超过两个，假设还有E、F&#8230;&#8230;，这样的分支在多路选择处不进行同步，每一个分支都会激活一次D的执行，即D（B）、D（C）、D（E）&#8230;&#8230;，并且这些D的线程互不干扰。
<p>（3） 业务场景举例
<p><a href="http://tkfiles.storage.msn.com/y1pqjmKiMB65hzvOsfDCaZPoqlAj0xmOePmaUTzMmGifHzu8yFeTY0iOCv1T0WOz-eS-uVcAyhXgYE?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="197" alt="clip_image004" src="http://tkfiles.storage.msn.com/y1pqjmKiMB65hzUZsI8pqRT0e-WbVjcR21x7AwJBNdZrckmgHykXjhkh11z9kqO7o6oiI_ABFURUD0?PARTNER=WRITER" width="460" border="0" /></a>
<p>报销流程，假设分为三部分：住宿费、交通费、飞机票特殊报销。可能出现的情况有：住宿费+交通费；住宿费+交通费+飞机票特殊报销；交通费；交通费+飞机票特殊报销&#8230;&#8230;
<p>流程开始，首先填写报销申请（勾选报销的内容，三种费用中选择），之后流程根据勾选的内容激活后续的填写不同报销单的分支，最后每一张报销单都需要经过审批。
<p>如果流程引擎没有实现多路合并我们可以变相的实现上面的功能。如下图：
<p><a href="http://tkfiles.storage.msn.com/y1pqjmKiMB65hz61C3PIQSTYLd8ZnrWRotBQgg-wUbeSKhiw5QwUAw6Mh4sHHyGGh8cQt8K9-furFU?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="199" alt="clip_image006" src="http://tkfiles.storage.msn.com/y1pqjmKiMB65hxIQmH5fpd6Q6ABK3WQOaYzeFlzr55WhQ4mMmRoeVk2u-hfDyU9JVfJRpkhFt9id8E?PARTNER=WRITER" width="528" border="0" /></a>
<p>但上述的实现有以下的不足：
<p>a、 重复工作量，审批分明是同一个活动，非要分多个来画；
<p>b、 无法进行统计，若要对审批这一活动的时间、数量等信息进行统计分析，那么分成了多个活动后就难于进行统计。
<p>c、 资源的分配，假设审批是由一个岗位来负责，且任务压力应该在这个岗位上负载均衡，那么分成了多个活动后这个资源的分配也无从着手。
<p>（4） 含义引申
<p>多路合并的后续路径，是一些相同行为的执行线程，这就类似于另外一种模式——多实例模式。这些线程终有一个需要同步的时候，在业务场景中，这个同步就非常的复杂，如后续步骤为制证，这种业务可以分为以下情况，我们一一举例说明：
<p>a、 强制一对一：一个审批后的单据生成一个财务凭证，那么这些多实例的线程暂时不同步，留到后续步骤。这种管理方式是比较常见的。
<p><a href="http://tkfiles.storage.msn.com/y1pqjmKiMB65hwPb46KdkOfLpjA9h6P4sq0wB368HCtLnFaKF_JaZCMBFu5lbf9UTba3kDEH3DanRQ?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="63" alt="clip_image008" src="http://tkfiles.storage.msn.com/y1pqjmKiMB65hxo6ts5qomkDxGR_7_BFEdzsyxAjia2g_Zduvp1pA34MfxD85zaUpJ93M5JCTBXSzY?PARTNER=WRITER" width="476" border="0" /></a>
<p>b、 强制多对一：同一个报销申请产生的报销单据，需要生成在一个财务凭证上。因此在制证前就需要同步。这种管理方式是比较常见的。
<p><a href="http://tkfiles.storage.msn.com/y1pqjmKiMB65hxICm1Mkn0gEHMsEEtLNdIxcJH1phrCqJGJiKWnBjMlDR3e717efm0RSvpphuNCPoE?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="63" alt="clip_image010" src="http://tkfiles.storage.msn.com/y1pqjmKiMB65hyUnCF_1GQjHWd2Fwr_yWOgcXPi5mTfF9XR_lSTYegCHTcuZnNWTRp4FxCzaK-DRfA?PARTNER=WRITER" width="477" border="0" /></a>
<p>c、 任意多对多：在本场景中，这个不太可能发生，但在一般的物流业务中却非常常见。假设飞机票的审批比较严格，拖得时间比较长，另外两个报销单早批了，那么先将这两个生成同一个财务凭证。这种任意性的规则，一般都是通过人来判断的。
<p><a href="http://tkfiles.storage.msn.com/y1pqjmKiMB65hxS4FUaqmpcci8Py_YWwnj5cEdgqk2O1RarItZtS23IXcB8eq71p_LhH2yQftgHBPo?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="63" alt="clip_image012" src="http://tkfiles.storage.msn.com/y1pqjmKiMB65hzqh3Y8pnDFAl0d7ZvuwayI9nZuivDMUCtqez6iYlhNBr3dQelBWAlhaB2CVw3cJxE?PARTNER=WRITER" width="477" border="0" /></a></p>
<img src ="http://www.cnblogs.com/ipointer/aggbug/1119962.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41268/" target="_blank">[新闻]财富:谷歌副总裁称其新闻搜索值1亿美元</a>]]></description></item><item><title>工作流系统中增加“业务活动”这一概念的想法</title><link>http://www.cnblogs.com/ipointer/archive/2007/10/25/936779.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Wed, 24 Oct 2007 19:06:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2007/10/25/936779.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/936779.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2007/10/25/936779.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/936779.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/936779.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">什么是&#8220;业务活动&#8221;，我认为是对活动在业务层面上的更高的抽象，就好像我们提面向对象时将子类的公共方法提取到抽象类中一样，我们将活动在业务上的公共提取到&#8220;业务活动&#8221;上。&#8220;业务活动&#8221;建立在&#8220;业务流程&#8221;之下，是对流程更细一层的业务抽象。一个&#8220;业务活动&#8221;可以对应一个具体流程中的多个相同业务概念的活动，也可以对应在同一&#8220;业务流程&#8221;下的多个具体流程中同一业务环节的多个活动。</span>
<p style="text-indent: 21pt"><span style="font-family: 宋体">这样我们在为业务流程建模时，首先是定义&#8220;业务流程&#8221;，其次应该是识别流程中有哪些&#8220;业务活动&#8221;，并为&#8220;业务活动&#8221;定制一些属性，最后才是定义具体的流程。使用一套已经建立好了的&#8220;业务流程&#8221;来定制流程就变得非常的轻松，流程上关联业务流程，活动上关联业务活动，这样所有与业务相关的属性就都可以设置好。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">先前版本的工作流将活动上不管是与业务相关的，还是与流程相关的属性一齐混杂在流程设计器上。这种实现方式有几大弊端：</span>1<span style="font-family: 宋体">、无法实现同一业务概念的复用，在一个活动上定的业务概念，需要在另一个相同业务意义的活动上原封不同的重定一遍。虽然我们实现了活动的复制，但我认为这种复制不是解决这种业务意义复用的很好方式。</span>2<span style="font-family: 宋体">、所有的与业务相关的实体都是独立于工作流系统之外的，在定义流程时将这些业务实体的设置记录在流程定义中。由于流程的版本控制，先前已经运行的流程定义是无法改变的，而业务实体又可能是会发生变化的，如单据的字段权限变化了（对于自定义表单这样生来就是为适应变化的，就更容易发生变化了），构件的参数又增加了一个等等，致使流程运行时业务上的改变得不到及时的体现，甚至运行不下去。</span>3<span style="font-family: 宋体">、流程运行结果，更通俗的讲可能是审批的结论、意见不能根据业务意义进行分类，明显的体现是审批结果打印时，所有的意见结论都罗列在一起（这个需求来源于</span>OA<span style="font-family: 宋体">项目组）。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">哪些活动属性应该放到&#8220;业务活动&#8221;上，我认为表单定义、表单权限设置（动作权限、字段权限），其他象外部工具、规则等也可以考虑放进来。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">工作流可以无区别的对待普通流程和</span>OA<span style="font-family: 宋体">使用的动态流程的权限设置，都包括表单参数设置、表单动作权限的设置、表单字段权限的设置。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">值得一提的是，像加签、会签、跳转等权限，我认为是纯粹的流程权限，不应该去表单的权限混为一谈，可以强制识别这些的流程引擎提供了的流程动态功能，并为其设置权限。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">对特殊性、向下兼容的考虑，在流程定义上仍然保留这些在&#8220;业务活动&#8221;添加的属性，在使用时首先查找具体活动上的定义，再查找业务活动上的定义。这样的同一&#8220;业务活动&#8221;对应的活动也可以有完全不同的特性，而且对于老版本的流程定义，即使没有在活动上关联业务活动，仍可以正常运行。</span></p>
<img src ="http://www.cnblogs.com/ipointer/aggbug/936779.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41267/" target="_blank">[新闻]Ubuntu创始人呼吁开发Linux桌面软件对抗苹果</a>]]></description></item><item><title>回发或回调参数无效。在配置中使用...pages enableEventValidation="true"/&gt;</title><link>http://www.cnblogs.com/ipointer/archive/2007/07/06/807989.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Fri, 06 Jul 2007 01:21:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2007/07/06/807989.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/807989.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2007/07/06/807989.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/807989.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/807989.html</trackback:ping><description><![CDATA[<p>今早给客户解决了个问题，问题<span>是回发或回调参数无效。在配置中使用&lt;pages enableEventValidation="true"/&gt;。<br>google了一下，网上有两种说法：<br>1、把&lt;pages enableEventValidation="true"/&gt;改成&lt;pages enableEventValidation="false"/&gt;就好了。<br>2、把web.config中的globalization元素的requestEncoding和responseEncoding属性都改成utf-8。<br><br>解决问题的时候两种方法都试过了，都没有用，最后发现是客户机器上装了.net framewoke2.0，如果装1.1的程序会将站点建成2.0的，把这里改过来就可以了。<img height=20 src="http://www.cnblogs.com/Emoticons/QQ/14.gif" width=20 border=0></span></p>
<img src ="http://www.cnblogs.com/ipointer/aggbug/807989.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41266/" target="_blank">[新闻]央视国际联手微软打造数字奥运媒体平台</a>]]></description></item><item><title>转我们经理的一篇文章，业务流程实现的讨论，希望大家集思广议。</title><link>http://www.cnblogs.com/ipointer/archive/2007/05/29/764045.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Tue, 29 May 2007 07:53:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2007/05/29/764045.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/764045.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2007/05/29/764045.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/764045.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/764045.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 现在搜一下业务流程管理，信息很多，也有很多产品号称是业务流程管理系统，但是在我看来，根本不是那么一回事，只能说某些产品只是实现了一个业务流中的某一个片段，如审批流、状态机、一个单据的流程。
<p>&nbsp;&nbsp; 想实现多个单据，如从申请、订单、发票、提货、出库、凭证一个完整的流程怎么办呢？怎么来用业务流管理起来。业务流系统的特点是根据规则系统自动分配任务，参与流程的人来完成任务。这个特点要求业务流的规则是可以定义和预见的。但是实际业务又要求，后续的业务只有在业务发生之时才能决定。这里面就存在一个矛盾，怎么解决这个矛盾呢。</p>
<p>&nbsp;&nbsp; 首先想到的是业务流的流程实例的拆分和合并，流程是跟业务对象实例一一对应的，业务流中的业务对象有很多种，每种业务对象的实例之间存在拆分和合并的可能。如果对象实例数据合并了，则流程实例也需要合并；如果对象实例数据拆分了，流程实例也需要拆分。</p>
<p>&nbsp;&nbsp; 第二个想到的办法是，将实例的明细数据启动一个流程实例，这里仍需要解决一个问题，那就是各个环节的处理是以一个业务实例为单位的，将明细数据对应一个流程实例，需要提供组处理的功能，即一组任务项合并为一个任务，处理这个任务就完成一批任务。</p>
<p>&nbsp;&nbsp; 第三个办法就是不使用业务流的原理来处理。即一个单据的完整流程使用业务流系统，几个单据之间使用的是集成流，利用集成的方式来处理几个单据之间的流转。</p>
<p>&nbsp; 虽然办法有很多，但是那种是最好的方式呢？</p>
<img src ="http://www.cnblogs.com/ipointer/aggbug/764045.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41265/" target="_blank">[新闻]Google在线百科工具Knol今日正式上线</a>]]></description></item><item><title>维护旧版本项目的一些方法</title><link>http://www.cnblogs.com/ipointer/archive/2007/03/28/690612.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Tue, 27 Mar 2007 16:45:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2007/03/28/690612.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/690612.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2007/03/28/690612.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/690612.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/690612.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天碰到一个比较棘手的问题，一个做了2年多的项目上反映了一个问题，问题比较简单，但是涉及改动的dll引用的dll非常多，而且项目上的版本已经很旧了，这一处的改动会影响到几乎所有的dll的更新。单独更新这个dll是不可能了，也不能做完面的版本升级（公司的规定，可能升级是要花钱的，呵呵），而且vss中也清过了，没有留当时的代码。如果dll也能像asp页面一样直接修改，保存后就运行就好了。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查了下资料，发现两种方法：（1）使用ildasm和ilasm两个自带的工具，加上IL（2）使用.NET Reflector插件FileDisassembler还原代码，重新编译。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先说一下第一种方法，使用ildasm打开项目上发过来的dll，在file下有dump菜单（如果是中文版就是文件下的转储菜单），弹出新窗口确定即可，生成后缀为.il的文件。下面就需要懂一点il语言，以前一直认为学习这个il语言没什么用，今天只能现学一把，因为问题比较小，4、5行就搞定了。保存之后，使用ilasm重新编译这个il文件。使用命令如ilasm.exe GSP_WorkflowEngine.il /dll /output=GSP_WorkflowEngine.dll，就OK了。不过在写il的时候还是碰到了很多问题，一直编译出错，还是il没有写好，看来学习il还是很多好处的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第二种就是使用.NET Reflector插件FileDisassembler，先把这个插件下好挂上，菜单中就会出现FileDisassembler这个菜单项，打开要反编译的dll，就可以生成出源码，即使用了混淆器，要修改的问题也很容易找到，毕竟我们对自己的代码还是很熟悉的。重新建解决方案，添加需要引用的dll，重新编译就OK了。<br></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 写在最后，这两种方法本质上原理是一致的，我个人觉得，如果对il掌握的非常好的话，第一种方法是非常爽的，即使是在项目现场，对一些小问题修改都是相当轻易的。由此还想到.net的安全性，对于非强命名的dll来说，这种il级别的修改都是有效的，但对于软件的保护是相当不利的，我们是很容易从il中找到验证正版的代码信息，直接去掉，重新编译就破解了；对于入侵者来说，也是很容易修改系统上.net程序的运行方式的。</p>
<img src ="http://www.cnblogs.com/ipointer/aggbug/690612.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41264/" target="_blank">[新闻]马云致信阿里巴巴全体员工号召准备过冬</a>]]></description></item><item><title>OutLook解析邮件头的问题</title><link>http://www.cnblogs.com/ipointer/archive/2007/03/13/673721.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Tue, 13 Mar 2007 15:33:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2007/03/13/673721.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/673721.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2007/03/13/673721.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/673721.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/673721.html</trackback:ping><description><![CDATA[客户反映我们的邮件提醒中，显示的发送时间不对，而且相差的非常的大，如下图：<img src="http://www.cnblogs.com/images/cnblogs_com/ipointer/ee.JPG" border=0><br>左下角是用DateTime.Now打出来的正确时间，而右上角是OutLook解析邮件头显示出来的时间。<br>看到这个问题，觉得相当的奇怪，因为邮件头里我也是用WriteString(ns, "Date: " + DateTime.Now);往流里面写的呀，怎么会出来这么一个奇怪的时间呢？<br>开始是怀疑客户那里的应用服务器的时间出了问题，可几经确认，发现确实不是这个问题。<br>难道是邮件头里还隐藏着什么时间吗，可拿OutLook正常收到的邮件头和我们自己发的多次比较也没有发现什么问题，这个问题真是太奇怪了。<br>转而求助Google，也没有发现相关的文章；求助微软的老马，他只是指点可能时区出了问题。反复检查服务器上的时区，也没有问题。<br>郁闷之时，用FoxMail收了一下我们发的邮件，竟然正常，开始怀疑是微软小小的bug。<br>但还是定位不出问题，情急之下，胡搞乱搞，改了一下系统日期，调成了2006年，发现那个错误的日期也变成了2006-1-3。再观察邮件头，发现Date字段也变成了2006，于是问题还是出在了这个Data字段上。<br>再仔细比较我们的邮件头和正常的邮件头，发现了一点区别：<br>正常的是：Date: Tue, 13 Mar 2007 23:09:10 +0800<br>我们的是：Date: 2007-3-13 23:08:22<br>hoho，原来是OutLook解释不了这样的时间格式呀，于是修改代码成：<br>WriteString(ns, "Date: " + DateTime.Now.ToString("r"));<br>问题搞定！<br>这个被客户骂死的小问题拖了一两个月（嘻嘻，因为觉得不是大问题，也确实不知道怎么弄），终于找到原因了，庆祝一下。
<img src ="http://www.cnblogs.com/ipointer/aggbug/673721.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41263/" target="_blank">[新闻]comScore 公布 6 月美国 TOP10 社会化网络排名</a>]]></description></item><item><title>MS DTC简述</title><link>http://www.cnblogs.com/ipointer/archive/2006/09/29/518490.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Fri, 29 Sep 2006 09:38:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2006/09/29/518490.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/518490.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2006/09/29/518490.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/518490.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/518490.html</trackback:ping><description><![CDATA[<p>刚刚看了关于MS DTC的文章，明白了一点。下面摘录一点。<br>MS DTC即为Microsoft Distributed Transaction Coordinator (MS&#174; DTC) 。</p>
<p><span class=90v>在 MS DTC 术语中，执行者被称为事务管理器。在执行事务保护资源的事务中，其参与者（如关系数据库）被称为资源管理器。<br><br><span class=90v>应用程序对每个资源管理器的第一次调用确定应用程序的当前事务。例如，如果应用程序在使用关系数据库，它会调用 ODBC 接口，此接口将事务对象与 ODBC 连接关联起来。在此之后，所有通过此连接的数据库调用都会代表该事务执行，直到该事务结束为止。<br></p>
<p><span class=90v>当某个资源管理器首先代表某个事务工作时，会通过调用事务管理器&#8220;登记&#8221;到该事务中。随着事务的发展，事务管理器会跟踪每个登记到该事务中的资源管理器。</span></p>
<p><span class=90v>通常，应用程序用 Commit 事务方法来完成事务。如果应用程序无法完成，则调用 Abort 事务方法，该方法可以撤消事务的操作。如果应用程序失败，MS DTC 就会放弃此事务。<br></p>
<p><span class=90v>当应用程序成功地完成事务的工作后，它会调用 MS DTC 来&#8220;提交&#8221;事务。然后 MS DTC 会仔细检查&#8220;两阶段&#8221; &#8220;提交协议&#8221;，使所有已登记的资源管理器都提交。两阶段提交协议可确保所有的资源管理器提交此事务，或全都放弃此事务。在第一阶段，MS DTC 询问每个资源管理器是否&#8220;准备&#8221;提交。如果所有参与者都回答&#8220;是&#8221;，那么在第二阶段 MS DTC 将向所有参与者广播提交信息。如果事务的任何部分失败，或资源管理器响应准备请求失败，或资源管理器响应&#8220;否&#8221;，那么 MS DTC 将通知所有资源管理器该事务已被放弃。</span></p>
</span></span></span>
<img src ="http://www.cnblogs.com/ipointer/aggbug/518490.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41262/" target="_blank">[新闻]万众期待 iPhone 3G 16GB上市两天破万</a>]]></description></item><item><title>图中跳转问题</title><link>http://www.cnblogs.com/ipointer/archive/2006/04/03/365394.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Mon, 03 Apr 2006 03:02:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2006/04/03/365394.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/365394.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2006/04/03/365394.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/365394.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/365394.html</trackback:ping><description><![CDATA[<p>问题描述：在有向图中，有唯一的开始节点和结束节点。图中节点的分叉和汇合有两种类型AND和XOR，分叉的时候为AND时，流程会流入下面所有的分支，为XOR只留向其中一条分支；汇合的时候，AND表示所有汇入的分支都已汇入流程才能继续，XOR表示一条汇入流程就继续。如果能从开始节点出发，正确的到达结束节点，那么这个流程就是正确的。<br>现在的问题是流程的节点之间需要跳转，即流程不按正常的流向进行，而是跳向指定的节点，先如何通过算法算出有向图中从某节点可以向的节点集合。<br><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ipointer/jumptest.JPG" border=0><br>解决思路：<br>1、使用有向图的化简，有两种局部可以化简，从一个节点到另一个节点间没有分叉和汇合，那么这两个节点可以化简为直接连接；如果从一个节点到另一个节点间经过m个分叉和n个汇合，假设m&gt;n,那么局部可以化简为m-n个分叉和一条直接的连线。将图化到最简，最后比较容易判断节点间是否可跳。<br>2、通过模拟运行的方式，将要跳出的节点的迁移从图中去掉，加上从跳出节点到跳入节点的迁移，模拟让流程运行一下。看流程是否正确。<br>存在的问题：方法一碰到及其复杂的流程无法处理，不能判断是否能化简；方法二，无法判断流程没有运行下去的原因，是上面有节点未完成，还是流程确实存在问题，无法运行下去。<br>请教各位有没有更好的办法，或是成型的算法来解决这个问题。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/ipointer/aggbug/365394.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41261/" target="_blank">[新闻]张宝全正式声明中国版HD-DVD涉嫌盗用EVD技术</a>]]></description></item><item><title>我们也要毕业了</title><link>http://www.cnblogs.com/ipointer/archive/2006/01/05/311769.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Thu, 05 Jan 2006 10:22:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2006/01/05/311769.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/311769.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2006/01/05/311769.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/311769.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/311769.html</trackback:ping><description><![CDATA[<DIV>
<P style="TEXT-INDENT: 21pt"><FONT size=3><SPAN style="FONT-FAMILY: 宋体">昨晚，</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">k</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体">一本叫&#8220;理工大风流史&#8221;的校园小说到两点，终于</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">k</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体">完。</SPAN><SPAN lang=EN-US></SPAN></FONT></P>
<P style="TEXT-INDENT: 21pt"><FONT size=3><SPAN style="FONT-FAMILY: 宋体">我不是一个矫情的人，但不由要写下下面一段矫情的文字。</SPAN><SPAN lang=EN-US></SPAN></FONT></P>
<P style="TEXT-INDENT: 21pt"><FONT size=3><SPAN style="FONT-FAMILY: 宋体">小说前面都是风平浪静，如同所有校园小说一样，笑料</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">+</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体">爱情</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">+</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体">暴力</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">+</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体">边缘性描写，怀疑现在的大学校园怎么都在走&#8220;蛊惑仔&#8221;的路线。</SPAN><SPAN lang=EN-US></SPAN></FONT></P>
<P style="TEXT-INDENT: 21pt"><FONT size=3><SPAN style="FONT-FAMILY: 宋体">但最后毕业告别和无言的结局，还是在我心里搅和一下。&#8220;窗外，一张破旧的床单上几个大字，一起走过，在夏雨里浸开了墨迹&#8221;、&#8220;临行，为了逃避送站的痛苦，趁兄弟们熟睡时就悄悄地走了，只在美女墙画上留下，保重，和歪歪扭扭的签名&#8221;，联想到的就是网上颇为流行的毕业图组，此时，另一更强烈的念头滑过，&#8220;我们也要毕业了&#8221;，顿时酸楚。</SPAN><SPAN lang=EN-US></SPAN></FONT></P>
<P style="TEXT-INDENT: 21pt"><FONT size=3><SPAN style="FONT-FAMILY: 宋体">黑暗中，胡乱的从桌上抓起</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">zippo</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体">，让醇香的烟气走过喉咙，填补此刻的苍白。寂静的夜里，谁会在意一个大男孩的心声。</SPAN><SPAN lang=EN-US></SPAN></FONT></P>
<P style="TEXT-INDENT: 21pt"><FONT size=3><SPAN style="FONT-FAMILY: 宋体">思绪不由飘到了千里之外的丁香校园，那里恐怕已是白雪皑皑了，而哥们们已是散落在天涯，我的大学生活好像也是刚刚开场就荒诞的谢幕了。可爱的超超估计还在为考研忙得焦头烂额；婆婆妈妈的</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">ken</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体">还能在珠海沐浴和煦的海风；油光满面的睿睿在伟大首都孕育做官的美梦；老鼠估计还在骗人的中兴软件煎熬度日；红过脖子的</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">DKF</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体">，差不多能满足当上他外国新娘的愿望；当然不能忘怀的还有那份已经飘散的爱情。</SPAN><SPAN lang=EN-US></SPAN></FONT></P>
<P style="TEXT-INDENT: 21pt"><FONT size=3><SPAN style="FONT-FAMILY: 宋体">小说自然是高于生活，我们的大学生活也可以拿出来试比高。我们的寝室翻不出</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">c cup</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体">和</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">taotao</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体">，却也有成堆的臭袜子和肥硕的小强；我们没有方桌上成宿的扑克麻将，却也有水房洗衣机上熬夜赶程序，贩卖机里驮来夜宵，兄弟们共饮；我们没有草丛树林的风流韵事，却也有</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">99</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体">多青涩的玫瑰；我们没有打架斗殴，却也有众志成城拿下篮球赛；我们没有网吧里数以月计的传奇奇迹，却也有</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">KTV</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体">里的烂醉如泥&#8230;&#8230;</SPAN><SPAN lang=EN-US></SPAN></FONT></P>
<P style="TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体"><FONT size=3>回首过去，我们一起走过，我小心翼翼的将记忆收起；而面对未来，没有了朝夕相处的兄弟，该往哪里去，我无言以对。</FONT></SPAN></P></DIV><img src ="http://www.cnblogs.com/ipointer/aggbug/311769.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41259/" target="_blank">[新闻]百度TV：高效率的“奥运事件眼球捕手”</a>]]></description></item><item><title>逻辑设计的例子</title><link>http://www.cnblogs.com/ipointer/archive/2005/12/29/307405.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Thu, 29 Dec 2005 06:24:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2005/12/29/307405.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/307405.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2005/12/29/307405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/307405.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/307405.html</trackback:ping><description><![CDATA[&nbsp; 
<P class=MsoBodyText2><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">开发团队使用前期的使用场景定义对象和之间的关系、行为和属性（</SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN">attribute</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">）。团队要做以下的任务：</SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<OL style="MARGIN-TOP: 0cm" type=1>
<LI class=MsoNormal style="COLOR: blue; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">定义场景中的用户、业务逻辑和数据对象。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></LI></OL>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<OL style="MARGIN-TOP: 0cm" type=1 start=2>
<LI class=MsoNormal style="COLOR: blue; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">定义对象的行为。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></LI></OL>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<OL style="MARGIN-TOP: 0cm" type=1 start=3>
<LI class=MsoNormal style="COLOR: blue; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">定义对象的属性（</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">attribute</SPAN><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">）或属性。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></LI></OL>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<OL style="MARGIN-TOP: 0cm" type=1 start=4>
<LI class=MsoNormal style="COLOR: blue; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">定义对象之间的逻辑关系。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></LI></OL>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoHeading8><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">统一建模语言</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoBodyText2><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">统一建模语言</SPAN><SPAN lang=EN-US>(UML) </SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">是阐述解决方案如何工作的工具。在图形化描述解决方案方面，它对于更完全分析解决方案非常有用。使用</SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN">UML</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">是一种容易的方法来画出组件、交互、关系和更多其他信息。通常，</SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN">UML</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">被用来方便的分析逻辑设计。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoHeading8><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">对象</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">当分析使用场景的时候，首要的任务就是确定其中的对象。一个对象通常是出现在场景中的一个业务实体或过程。例如，在下面的一段话中，粗体字就是对象</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">:<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 36pt"><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">用户</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">(User)</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">选择一个<B style="mso-bidi-font-weight: normal">目录</B></SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">(Catalog)</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">来浏览。<B style="mso-bidi-font-weight: normal">分类</B></SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt"> (Categories)</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">和<B style="mso-bidi-font-weight: normal">产品</B></SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt"> (Products)</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">被展现在已选的根<B style="mso-bidi-font-weight: normal">目录</B></SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">(Catalog)</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">中。<B style="mso-bidi-font-weight: normal">用户</B></SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">(User)</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">之后选择一个<B style="mso-bidi-font-weight: normal">产品</B></SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">(Product)</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">来查看它的细节或选择一个<B style="mso-bidi-font-weight: normal">分类</B></SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">(Categories)</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">来查看其中的<B style="mso-bidi-font-weight: normal">产品</B></SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">(Product)</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">和子分类。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoBodyText2><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">在这个场景中，下列对象被使用到：</SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<UL style="MARGIN-TOP: 0cm" type=disc>
<LI class=MsoNormal style="COLOR: blue; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"><SPAN lang=EN-US style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt">User <o:p></o:p></SPAN>
<LI class=MsoNormal style="COLOR: blue; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"><SPAN lang=EN-US style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt">Catalog <o:p></o:p></SPAN>
<LI class=MsoNormal style="COLOR: blue; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"><SPAN lang=EN-US style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt">Categories <o:p></o:p></SPAN>
<LI class=MsoNormal style="COLOR: blue; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"><SPAN lang=EN-US style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt">Product <o:p></o:p></SPAN>
<LI class=MsoNormal style="COLOR: blue; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"><SPAN lang=EN-US style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt">Products <o:p></o:p></SPAN></LI></UL>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">下面的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">UML</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">图阐述了在本例中的对象。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;<IMG height=73 hspace=0 src="http://www.cnblogs.com/images/cnblogs_com/ipointer/object.JPG" width=400></o:p></SPAN></P>
<P class=fig><SPAN lang=EN-US><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">在这个场景中有五个基础的对象；然而，为了实现场景的功能还可能需要一些附属的的对象，即使他们没有被特别的列入这个基础对象列表。你可以在检查动作的时候定义这些附属的对象。你首先要定义出动作，才能发现并定义这些附属的对象。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><I style="mso-bidi-font-style: normal"><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></I></P>
<P class=MsoHeading8><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">行为</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">在定义完明显的对象集合之后，下一步的工作就是定义他们各自的行为，以方法和服务的方式表现。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">为了定义对象的行为，你必须首先估计场景中要做什么。例如，在下面的一段话中，动作备用粗体标识：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 36pt"><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">用户<B style="mso-bidi-font-weight: normal">选择</B>一个目录来浏览。分类和产品被<B style="mso-bidi-font-weight: normal">展现</B>在已选的根目录中。用户之后<B style="mso-bidi-font-weight: normal">选择</B>一个产品来<B style="mso-bidi-font-weight: normal">查看</B>它的细节或选择一个分类来<B style="mso-bidi-font-weight: normal">查看</B>其中的产品和子分类。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">发生的第一件事是用户选择了一个目录。下面的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">UML</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">图阐述了用户对象包含了一个选择目录的行为。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p><IMG height=88 hspace=0 src="http://www.cnblogs.com/images/cnblogs_com/ipointer/activity.JPG" width=100>&nbsp;</o:p></SPAN></P>
<P class=fig><I style="mso-bidi-font-style: normal"><SPAN lang=EN-US><o:p></o:p></SPAN></I></P>
<P class=MsoNormal><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">不能关联到明显对象的行为必须从场景中派生。如下面的情况，用户要选择一个目录，那么必须有一些机制使得一个目录可以从一个目录列表中被选中。你可以从逻辑上假定一个目录集合对象，他管理目录的集合。因此，你就可以在对象的列表中添加一个新的对象。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">在定义完目录集合对象之后，你可以添加属于这个对象的第一个方法</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt; mso-bidi-font-style: italic">Select Catalog</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"> </SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">之后，你需要继续估计场景中的每一句话，直到你定义出所的对象和相关的行为。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoHeading8><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">属性</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">定义完行为之后的下一步工作是定义对象的属性（</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">attribute</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">，或称为</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">property</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">）。属性是解决方案需要跟踪的元素。它们是数据保存和持续化的位置。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoBodyText2><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">通过分析场景中的行为来定义属性（</SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN">attribute</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">），抽取出场景中需要跟踪或持续化的元素。例如，在前面一块中，场景指定用户需要查看产品。当产品被查看时，展现给用户的那些元素就是产品的属性（</SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN">attribute</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">）。例如，如果业务需要产品的描述和价格被展示给用户，这些元素就成为属性被添加到对象中去。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">下面的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">UML</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">图中阐述了包含</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">Name</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">属性的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">User</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">对象。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;<IMG height=100 hspace=0 src="http://www.cnblogs.com/images/cnblogs_com/ipointer/attribute.JPG" width=100></o:p></SPAN></P>
<P class=fig><I style="mso-bidi-font-style: normal"><SPAN lang=EN-US><o:p></o:p></SPAN></I></P>
<P class=MsoToc1><SPAN lang=EN-US><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoHeading8><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN">关系</SPAN></P>
<P class=MsoNormal><B><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></B></P>
<P class=MsoNormal><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">在定义完对象、行为和属性（</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt">attribute</SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">）之后，下一步是定义关系。关系是对象间的逻辑关联。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial">为了定义关系，需要分析对象间是如何交互的。例如，目录集合对象跟目录对象有一个关系，因为目录集合对象管理目录对象。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt"><o:p>&nbsp;</o:p></SPAN></P><SPAN style="FONT-SIZE: 11pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Arial; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">另一个关系的类型是继承，处理一个对象定义另一个对象的特定情况。例如，解决方案中设计要卖出食物和书，但设计者向在逻辑上区分两者，结果是定义出一中关系书和食物对象都是产品类型的一类。它们都继承自产品对象。</SPAN> <img src ="http://www.cnblogs.com/ipointer/aggbug/307405.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41260/" target="_blank">[新闻]谷歌启动强大引擎 ８月起全球营销成都</a>]]></description></item><item><title>entlib2.0研究（五）--缓存组件的设计</title><link>http://www.cnblogs.com/ipointer/archive/2005/12/13/296289.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Tue, 13 Dec 2005 07:08:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2005/12/13/296289.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/296289.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2005/12/13/296289.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/296289.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/296289.html</trackback:ping><description><![CDATA[摘要:  3缓存组件的设计缓存组件被设计实现下面的目标：l 提供一定的APIsl 是开发者在不了解内部工作原理的情况下，使用组件。l 使用配制工具进行简单的配制l 提供性能的优化l 线程安全，l 如果异常发生，确保后端数据的完整l 确保内存数据和后端数据的同步3.1设计亮点当你使用CacheFactory初始化CacheManager实例时，他在内部创建CacheManagerFactory对象，接着创建&nbsp;&nbsp;<a href='http://www.cnblogs.com/ipointer/archive/2005/12/13/296289.html'>阅读全文</a><img src ="http://www.cnblogs.com/ipointer/aggbug/296289.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41258/" target="_blank">[新闻]微软开放游戏平台 Xbox 360用户可开发新视频游戏</a>]]></description></item><item><title>entlib2.0的研究（四）--使用缓存组件开发应用程序</title><link>http://www.cnblogs.com/ipointer/archive/2005/12/12/295458.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Mon, 12 Dec 2005 03:54:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2005/12/12/295458.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/295458.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2005/12/12/295458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/295458.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/295458.html</trackback:ping><description><![CDATA[摘要:  2使用缓存组件进行开发首先，解释如何配置，添加到你的解决方案中去，选择后端的存储器。接着，显示如何在特定场景中使用缓存组件。2.1添加配置信息注意: 这个版本的配制工具还没有发布，所以要改变配置，只能编辑XML文件，参考QuickStart和单元测试的配置文件。2.2添加程序代码完成由以下的几个步骤：l 添加Microsoft.Practices.EnterpriseLibrary.Cachin&nbsp;&nbsp;<a href='http://www.cnblogs.com/ipointer/archive/2005/12/12/295458.html'>阅读全文</a><img src ="http://www.cnblogs.com/ipointer/aggbug/295458.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41257/" target="_blank">[新闻]访Firefox CEO:Firefox并不完美 但会越来越好</a>]]></description></item><item><title>国际化组件的设计</title><link>http://www.cnblogs.com/ipointer/archive/2005/12/09/293874.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Fri, 09 Dec 2005 07:52:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2005/12/09/293874.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/293874.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2005/12/09/293874.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/293874.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/293874.html</trackback:ping><description><![CDATA[&nbsp; 
<H3><SPAN lang=EN-US style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana; mso-fareast-language: ZH-CN"><SPAN style="mso-list: Ignore">1.1.1<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">国际化组件</SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></H3>
<P class=MsoNormal><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><o:p>&nbsp;</o:p></SPAN></P>
<TABLE style="MARGIN-LEFT: 5.25pt; WIDTH: 450pt; BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" cellSpacing=0 cellPadding=0 width=600 border=0>
<TBODY>
<TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
<TD style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BACKGROUND: #00ccff; PADDING-BOTTOM: 0cm; WIDTH: 283pt; PADDING-TOP: 0cm" vAlign=top width=377>
<P class=MsoBodyText><SPAN class=BodyTextBold><SPAN lang=EN-US style="mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-language: ZH-CN">Author<o:p></o:p></SPAN></SPAN></P></TD>
<TD style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BACKGROUND: #00ccff; PADDING-BOTTOM: 0cm; WIDTH: 167pt; PADDING-TOP: 0cm" vAlign=top width=223>
<P class=MsoBodyText><SPAN class=BodyTextBold><SPAN lang=EN-US style="mso-bidi-font-family: 'Times New Roman'">Contact<o:p></o:p></SPAN></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 1; mso-yfti-lastrow: yes">
<TD style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 283pt; PADDING-TOP: 0cm" vAlign=top width=377>
<P class=MsoBodyText><SPAN lang=FR style="mso-fareast-font-family: 宋体; mso-fareast-language: ZH-CN; mso-ansi-language: FR">Jin-Chen Zhu,LangChao</SPAN><SPAN lang=FR style="mso-ansi-language: FR"><o:p></o:p></SPAN></P></TD>
<TD style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 167pt; PADDING-TOP: 0cm" vAlign=top width=223>
<P class=MsoBodyText><SPAN lang=EN-GB style="mso-fareast-language: ZH-CN; mso-ansi-language: EN-GB">zhujch@langchao.com</SPAN><SPAN lang=EN-GB style="mso-ansi-language: EN-GB"><o:p></o:p></SPAN></P></TD></TR></TBODY></TABLE>
<P class=MsoNormal><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><o:p>&nbsp;</o:p></SPAN></P>
<H4><SPAN lang=EN-US style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana; mso-fareast-language: ZH-CN"><SPAN style="mso-list: Ignore">1.1.1.1<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN">Goal<o:p></o:p></SPAN></H4>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-fareast-language: ZH-CN">国际化组件可以将非特定语言的字符串转化成特定语言的字符串，还可以通过反射的方式将某一界面上控件的文字换成特定语言的文字。</SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><o:p>&nbsp;</o:p></SPAN></P>
<H4><SPAN lang=EN-US style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana; mso-fareast-language: ZH-CN"><SPAN style="mso-list: Ignore">1.1.1.2<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN">Context<o:p></o:p></SPAN></H4>
<P class=MsoNormal><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><o:p></o:p></SPAN></P>
<H4><SPAN lang=EN-US style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana; mso-fareast-language: ZH-CN"><SPAN style="mso-list: Ignore"><IMG height=357 hspace=0 src="http://www.cnblogs.com/images/cnblogs_com/ipointer/global1.JPG" width=505><BR>1.1.1.3<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN">Behavior View<o:p></o:p></SPAN></H4>
<P class=MsoNormal><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><o:p>&nbsp;</o:p></SPAN></P>
<H4><SPAN lang=EN-US style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana; mso-fareast-language: ZH-CN"><SPAN style="mso-list: Ignore">1.1.1.4<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN">Structure View<BR><IMG height=344 hspace=0 src="http://www.cnblogs.com/images/cnblogs_com/ipointer/global2.JPG" width=637><BR><o:p></o:p></SPAN></H4>
<P class=MsoNormal style="MARGIN-LEFT: 0cm; TEXT-INDENT: -54pt; mso-char-indent-count: -5.4; mso-para-margin-left: -5.4gd"><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 0cm; TEXT-INDENT: -36pt; mso-char-indent-count: -3.6; mso-para-margin-left: -3.6gd"><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 0cm; TEXT-INDENT: -36pt; mso-char-indent-count: -3.6; mso-para-margin-left: -3.6gd"><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 72pt; mso-char-indent-count: 7.2"><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></P>
<H4><SPAN lang=EN-US style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana; mso-fareast-language: ZH-CN"><SPAN style="mso-list: Ignore"><IMG height=432 hspace=0 src="http://www.cnblogs.com/images/cnblogs_com/ipointer/global3.JPG" width=401><BR>1.1.1.5<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN">Other Specification<o:p></o:p></SPAN></H4>
<P class=MsoNormal><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="mso-fareast-language: ZH-CN"><o:p>&nbsp;</o:p></SPAN></P>
<H4><SPAN lang=EN-US style="mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana; mso-fareast-language: ZH-CN"><SPAN style="mso-list: Ignore">1.1.1.6<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US style="mso-fareast-language: ZH-CN">Best Practice <o:p></o:p></SPAN></H4>
<P class=MsoNormal style="TEXT-INDENT: 54pt; mso-char-indent-count: 6.0; mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; COLOR: teal; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes">ResourceFactory</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"> fa = <SPAN style="COLOR: teal">ResourceFactory</SPAN>.GetInstance();<o:p></o:p></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: teal">GspRM</SPAN> resourceManager = <SPAN style="COLOR: blue">null</SPAN>;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">if</SPAN> (comboBox1.Text == <SPAN style="COLOR: maroon">"</SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; COLOR: maroon; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes">中文<SPAN lang=EN-US>"</SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes">)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>resourceManager = fa.GetRM(<SPAN style="COLOR: maroon">"formui"</SPAN>, <SPAN style="COLOR: maroon">"zh-cn"</SPAN>);<o:p></o:p></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">//resourceManager = fa.GetRM("aa","zh-cn");<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: teal">FormLanguageSwitchSingleton</SPAN> change = <SPAN style="COLOR: teal">FormLanguageSwitchSingleton</SPAN>.Instance;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>change.ChangeLanguage(<SPAN style="COLOR: blue">this</SPAN>, <SPAN style="COLOR: blue">new</SPAN> System.Globalization.<SPAN style="COLOR: teal">CultureInfo</SPAN>(<SPAN style="COLOR: maroon">"zh-chs"</SPAN>));<o:p></o:p></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">else<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>resourceManager = fa.GetRM(<SPAN style="COLOR: maroon">"formui"</SPAN>, <SPAN style="COLOR: maroon">"en-us"</SPAN>);<o:p></o:p></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: teal">FormLanguageSwitchSingleton</SPAN> change = <SPAN style="COLOR: teal">FormLanguageSwitchSingleton</SPAN>.Instance;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>change.ChangeLanguage(<SPAN style="COLOR: blue">this</SPAN>, <SPAN style="COLOR: blue">new</SPAN> System.Globalization.<SPAN style="COLOR: teal">CultureInfo</SPAN>(<SPAN style="COLOR: maroon">"en-us"</SPAN>));<o:p></o:p></SPAN></P>
<P class=MsoNormal style="mso-pagination: none; mso-layout-grid-align: none"><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 9pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto; mso-no-proof: yes"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: teal">MessageBox</SPAN>.Show(resourceManager.GetLocalizeToken(<SPAN style="COLOR: maroon">"result"</SPAN>, <SPAN style="COLOR: maroon">"jane"</SPAN>));</SPAN><SPAN lang=EN-US style="BACKGROUND: #d9d9d9; mso-fareast-language: ZH-CN; mso-shading: white; mso-pattern: gray-15 auto"><o:p></o:p></SPAN></P><img src ="http://www.cnblogs.com/ipointer/aggbug/293874.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41256/" target="_blank">[新闻]360安全浏览器发布</a>]]></description></item><item><title>entlib2.0研究（三）缓存组件的介绍</title><link>http://www.cnblogs.com/ipointer/archive/2005/12/09/293839.html</link><dc:creator>栖息的熊</dc:creator><author>栖息的熊</author><pubDate>Fri, 09 Dec 2005 07:34:00 GMT</pubDate><guid>http://www.cnblogs.com/ipointer/archive/2005/12/09/293839.html</guid><wfw:comment>http://www.cnblogs.com/ipointer/comments/293839.html</wfw:comment><comments>http://www.cnblogs.com/ipointer/archive/2005/12/09/293839.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/ipointer/comments/commentRss/293839.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/ipointer/services/trackbacks/293839.html</trackback:ping><description><![CDATA[&nbsp; 
<P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">缓存组件</SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">介绍</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">缓存组件可以使开发者将本地的缓存机制加到应用程序中。它支持内存中缓存和可选的后端的存储（数据库方式和隔离存储方式）。缓存组件提供</SPAN><SPAN lang=EN-US style="FONT-SIZE: 8.5pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">retrieve, add, and remove cached data</SPAN><SPAN style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">等功能。过期和自我清除策略也是给组件的一部分。<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><SPAN style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">缓存可以克服一些风险：<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; mso-list: l3 level1 lfo1; tab-stops: list 42.0pt"><SPAN lang=EN-US style="COLOR: black; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">性能。采用一种更为密切的方式，为数据的消费者存储相关的数据；以避免重复性的数据创建、处理和传输。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; mso-list: l3 level1 lfo1; tab-stops: list 42.0pt"><SPAN lang=EN-US style="COLOR: black; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">可度量性。在缓存中存储信息可以节省资源，并随着应用程序的需求量增加，而增加可度量性<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; mso-list: l3 level1 lfo1; tab-stops: list 42.0pt"><SPAN lang=EN-US style="COLOR: black; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">可用性。使用缓存，您的应用能够在网络的的延时、<SPAN lang=EN-US>WEB</SPAN>服务和硬件的问题中减小损失。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">常用场景<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US style