﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;DIV id="ddm_Title"&gt;&lt;H1&gt;大大毛&amp;nbsp;&lt;i class="little"&gt;的笔记&lt;/i&gt;&lt;/H1&gt;&lt;H2&gt;&amp;nbsp&amp;nbsp;DDM's Note&lt;/H2&gt;&lt;/DIV&gt;-文章分类-&lt;b value="0201" class="ddm_subItem"&gt;ASP&lt;/b&gt;</title><link>http://www.blogjava.net/tw-ddm/category/17538.html</link><description>&lt;div id="ddm_subTitle"&gt;
&lt;h2 class="catchline"&gt;
        哪怕没有办法一定有说法,&lt;br/&gt;
        就算没有鸽子一定有乌鸦,&lt;br/&gt;
        固执无罪&amp;nbsp;梦想有价,&lt;br/&gt;
        让他们惊讶.
&lt;/h2&gt;
&lt;/div&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 21:53:47 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 21:53:47 GMT</pubDate><ttl>60</ttl><item><title>ASP中页面功能的分离及接口的实现</title><link>http://www.blogjava.net/tw-ddm/articles/82645.html</link><dc:creator>大大毛</dc:creator><author>大大毛</author><pubDate>Tue, 21 Nov 2006 17:17:00 GMT</pubDate><guid>http://www.blogjava.net/tw-ddm/articles/82645.html</guid><wfw:comment>http://www.blogjava.net/tw-ddm/comments/82645.html</wfw:comment><comments>http://www.blogjava.net/tw-ddm/articles/82645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tw-ddm/comments/commentRss/82645.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tw-ddm/services/trackbacks/82645.html</trackback:ping><description><![CDATA[
		<font size="2">      还是这份短工，虽然用的是ASP，不过俺在工作中还是有所收获。<br /><br />      以前就用ASP，用起来挺顺手的，当然是在代码量及逻辑的复杂度都比较小的时候感觉还挺好，呵。但是打这份工，接手的任务是修改一套系统的局部。系统的逻辑现在还挺乱的，不太容易理解，不过通过这段时间的研究还是学了不少。<br /><br />      这个ASP系统在结构上实现了一定的封装，功能页面全部使用 Function 来实现。每个ASP页面均由两部分组成，一个是外层文件(充当模板)，另一个用Function来封逻辑，使用时在外层的ASP中使用 include 来引入逻辑页。同时整个系统的主干则按功能划分成了单独的功能模块，模块利用Function以及Class来实现，最后同样使用这种拼装的方式搭起一个系统的骨架。<br />      这种架构看起来很不错，不过在今天俺写一张自用的ASP页面时发现了一些问题。<br /><br />      我的这张ASP是自己写自己用的，主要是用于探索库/表的结构以及发现数据特征。页面的功能除了提供 <a href="/tw-ddm/articles/82438.html" target="_blank">SQLServer的操作</a> 外，另外还需要用于查看及分析从 AS400 上获取的数据。项目中与AS400的连接已经被封装成了组件，提取不同的数据需要通过组件向 AS400 主机发送不同的指令字符串来实现。由于指令字符串是根据一个协议来规范，因此合成不同的指令需要使用不同的逻辑。为了将这些复杂以及单独的逻辑加以进行区分，我想过利用现有系统的这种结构来完成，即每个指令的逻辑被放在一个单独的 Funtion 中，然后根据 页面 提交上来的参数来分别调用，结果程序变成这样 ( 这里使用的是示例代码 )：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Code_Closed_Image_003317" onclick="this.style.display='none'; Code_Closed_Text_003317.style.display='none'; Code_Open_Image_003317.style.display='inline'; Code_Open_Text_003317.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" /><img id="Code_Open_Image_003317" style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_003317.style.display='none'; Code_Closed_Image_003317.style.display='inline'; Code_Closed_Text_003317.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" /><span id="Code_Closed_Text_003317" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><strong>程序原框架</strong></span><span id="Code_Open_Text_003317" style="DISPLAY: none"><br /><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000"> AS400Code<br />AS400Code </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000"><br />AS400Code </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Request(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">AS400Code</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">初始化"AS400连接组件"</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000"> IQS<br /></span><span style="COLOR: #0000ff">Set</span><span style="COLOR: #000000"> IQS </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">New</span><span style="COLOR: #000000"> IQS<br /></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">---------控制器------------</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000"> CodeString,Head<br /></span><span style="COLOR: #0000ff">Select</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">Case</span><span style="COLOR: #000000"> AS400Code<br />    </span><span style="COLOR: #0000ff">Case</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PSCA1000</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">调用指令封装逻辑</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">Call</span><span style="COLOR: #000000"> PSCA1000(CodeString,Head)<br />        </span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">调用 封装AS400连接 的组件</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        IQS.send(CodeString)<br />        </span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">显示连接组件持有的数据集</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">Call</span><span style="COLOR: #000000"> ShowRs(IQS.Rst,Head)<br />    </span><span style="COLOR: #0000ff">Case</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PSCA1002</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">调用指令封装逻辑</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">Call</span><span style="COLOR: #000000"> PSCA1002(CodeString,Head)<br />        </span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">调用 封装AS400连接 的组件</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        IQS.send(CodeString)<br />        </span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">显示连接组件持有的数据集</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">Call</span><span style="COLOR: #000000"> ShowRs(Head)<br />    </span><span style="COLOR: #0000ff">Case</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">Else</span><span style="COLOR: #000000"><br />        Response.Write </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">尚未支持AS400程式码:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> AS400Code<br /></span><span style="COLOR: #0000ff">End</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">Select<br /></span><span style="COLOR: #000000"><span style="COLOR: #0000ff">Set</span><span style="COLOR: #000000"> IQS </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">Nothing</span><span style="COLOR: #000000"> </span><br /></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">------------视图-------------</span><span style="COLOR: #008000"><br />'</span><span style="COLOR: #008000">显示功能帮助信息</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">Function</span><span style="COLOR: #000000"> ShowHelp()<br />    Response.Write </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;OL&gt;参数AS400Code:AS400程式码:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />    Response.Write </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;LI&gt;PSCA1000&lt;/LI&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />    Response.Write </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;LI&gt;PSCA1002&lt;/LI&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />    Response.Write </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;/OL&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">End Function</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">使用二维表以及Head来生成 &lt;table&gt; 元素</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">Function</span><span style="COLOR: #000000"> ShowRs(Rst,Head)<br />    </span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">使用Rst来生成一个 &lt;table&gt; 元素,并利用 Head 来生成表头列</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">End Function</span><span style="COLOR: #000000"> <br /></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">---------AS400指令处理逻辑(模型)------------</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">Function</span><span style="COLOR: #000000"> PSCA1000(ByRef CodeString,ByRef Head)<br />    </span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">根据复杂的逻辑来合成CodeString以及数据报表头</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">End Function</span><span style="COLOR: #000000"> <br /></span><span style="COLOR: #0000ff">Function</span><span style="COLOR: #000000"> PSCA1002(ByRef CodeString,ByRef Head)<br />    </span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">根据复杂的逻辑来合成CodeString以及数据报表头</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">End Function</span></span></div><p>         这里提一下，就算是将 AS400指令处理逻辑 全部放在一个文件，并在当前的页面中使用 Include 包含进来，那么整个功能的框架也是没有什么变化的。<br /><br />         仔细看看这个框架，不难发现<strong>问题所在</strong>： 随着以后所支持AS400指令的增多，框架中充当“控制器”的 Select Case 部分将受到严重考验。<br />               <strong>1.</strong>大量的Case分支充满其中，重复代码过多；<br />               <strong>2.</strong>随着指令逻辑的增多，指令逻辑将不可避免的放入单独的文件中，这样一旦增加一个AS400指令就必须更改多个ASP页面；<br />               <strong>3.</strong>页面为使用者显示一个功能帮助信息，其中需要显示到所能支持的指令以及指令含义信息，而这些信息又不可避免的需要在主页面中重复输入及更改。<br /><br />         累则思变 :-)，想想例如JAVA/NET中的那些设计，如果能够利用上，把调用与实现分离就OK了。仔细分析一下上面的代码不难发现，问题出在“控制器”与“模型”的强耦合上，结果造成两者的“同步更新”。<br /><br />         降低耦合，最好使的方法就是在两者之间加入一个层 (接口) ，这样问题即可解决。由于ASP本身并不提供接口这一东东，只能自己来实现罗。下面是我的解决方法：<br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Code_Closed_Image_004719" onclick="this.style.display='none'; Code_Closed_Text_004719.style.display='none'; Code_Open_Image_004719.style.display='inline'; Code_Open_Text_004719.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" /><img id="Code_Open_Image_004719" style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_004719.style.display='none'; Code_Closed_Image_004719.style.display='inline'; Code_Closed_Text_004719.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" /><span id="Code_Closed_Text_004719" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><strong>程序新的框架</strong>(分离的感觉真好)</span><span id="Code_Open_Text_004719" style="DISPLAY: none"><br /><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008000">'</span><span style="COLOR: #008000">注意这里: --新增了一个 CodeDic 容器,它就是俺设计的接口</span><span style="COLOR: #008000"><br /></span><span>Dim CodeDic<br />Set</span><span style="COLOR: #000000"> CodeDic </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Server.CreateObject(</span><span style="COLOR: #000000">"</span><span>Scripting.Dictionary")<br /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">#include file</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">As400Code.asp</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">--&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">-----------</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000"> AS400Code<br />AS400Code </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000"><br />AS400Code </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Request(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">AS400Code</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">初始化"AS400连接组件"</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000"> IQS<br /></span><span style="COLOR: #0000ff">Set</span><span style="COLOR: #000000"> IQS </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">New</span><span style="COLOR: #000000"> IQS<br /></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">---------控制器------------</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000"> CodeString,Head,myFun<br /></span><span style="COLOR: #0000ff">If</span><span style="COLOR: #000000"> CodeDic.Exists(AS400Code) </span><span style="COLOR: #0000ff">Then</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">Set</span><span style="COLOR: #000000"> myFun </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">GetRef</span><span style="COLOR: #000000">(AS400Code)<br />    </span><span style="COLOR: #0000ff">Call</span><span style="COLOR: #000000"> myFun(CodeString,Head)<br />    IQS.send(CodeString)<br />    </span><span style="COLOR: #0000ff">Call</span><span style="COLOR: #000000"> ShowRs(Head)<br /></span><span style="COLOR: #0000ff">Else</span><span style="COLOR: #000000"><br />    Response.Write </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">尚未支持AS400程式码:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> AS400Code<br /></span><span style="COLOR: #0000ff">End</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">If<br /></span><span style="COLOR: #000000"><span style="COLOR: #000000"><span style="COLOR: #0000ff">Set</span><span style="COLOR: #000000"> IQS </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">Nothing</span></span><br /></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">------------视图-------------</span><span style="COLOR: #008000"><br />'</span><span style="COLOR: #008000">显示功能帮助信息,看似代码增多了几行,不过俺再也不用改它了</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">Function</span><span style="COLOR: #000000"> ShowHelp()<br />    </span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000"> Code<br />    Response.Write </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;OL&gt;参数AS400Code:AS400程式码:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">If</span><span style="COLOR: #000000"> CodeDic.Count </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">Then</span><span style="COLOR: #000000"><br />        Response.Write </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">现在尚无指令支持</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">Else</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">For</span><span style="COLOR: #000000"> Code In CodeDic<br />            Response.Write </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;LI&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> Code </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> CodeDic.Item(Code) </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;/LI&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">Next</span><span style="COLOR: #000000"> <br />    </span><span style="COLOR: #0000ff">End</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">If</span><span style="COLOR: #000000"> <br />    Response.Write </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;/OL&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">End Function</span><span style="COLOR: #000000"> <br /></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">使用二维表以及Head来生成 &lt;table&gt; 元素</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">Function</span><span style="COLOR: #000000"> ShowRs(Rst,Head)<br />    </span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">使用Rst来生成一个 &lt;table&gt; 元素,并利用 Head 来生成表头列</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">End Function</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">=========As400Code.asp=============</span><span style="COLOR: #008000"><br />'</span><span style="COLOR: #008000">---------AS400指令处理逻辑(模型)------------</span><span style="COLOR: #008000"><br />'</span><span style="COLOR: #008000">注意这里:由模型向接口注册</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">CodeDic.Add </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PSCA1000</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PSCA1000指令的说明信息</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">Function</span><span style="COLOR: #000000"> PSCA1000(ByRef CodeString,ByRef Head)<br />    </span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">根据复杂的逻辑来合成CodeString以及数据报表头</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">End Function</span><span style="COLOR: #000000"> <br />CodeDic.Add </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PSCA1002</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PSCA1002指令的说明信息</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">Function</span><span style="COLOR: #000000"> PSCA1002(ByRef CodeString,ByRef Head)<br />    </span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">根据复杂的逻辑来合成CodeString以及数据报表头</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #0000ff">End Function</span><span style="COLOR: #000000"> </span></span></div><p>         呵呵，就是这么简单。<br />         <strong>中间层</strong>(接口)：<br />               这里我使用了一个容器来充当中间层，当然这里为了省事在容器的使用上并没有完全实现接口的功能。我这里向容器提交的 Key 是AS400指令处理函数名； Value 是外层页面上需要的对应帮助信息。如果想完全实现接口的话，应该这样用容器： key--功能名；value--处理函数名；这样一旦处理逻辑发生变动，只需更新对应的 value 即可。<br />         <strong>模型</strong>：<br />               这里有点变动，程序功能添加的控制权由原先的“控制器”转向“模型”，因为在这里它更容易变动一些。而且让它只与充当中间层的容器打交道。<br />         <strong>视图</strong>：<br />               同样的，也只让它与中间层打交道。<br />         <strong>控制器</strong>：<br />               这里变动最大，诸多不爽的 Select Case 分支被拿掉，控制器仅仅与中间层打交道。利用 VBScript 提供的 GetRef( funName ) 获取函数指针，来实现逻辑功能的动态调用。<br /><br />         每次需要新增AS400指令逻辑处理功能时，只需向As400Code.asp添加一个功能处理函数，并将其注册到容器即可实现整体功能的更新。<br />         两个框架经过对比不难看出其<strong>优点</strong>，新的框架在新增功能时：<br />               1.避免了重复的调用代码；<br />               2.仅仅修改一处地方。<br /></p></font>
<img src ="http://www.blogjava.net/tw-ddm/aggbug/82645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tw-ddm/" target="_blank">大大毛</a> 2006-11-22 01:17 <a href="http://www.blogjava.net/tw-ddm/articles/82645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>