三、各层之间的通信机制讨论
了解了N层模型后,我们就有一个新的疑问了:
如何统一并联系起各层,以方便设计师和程序员互不干扰的协作呢?

其实联系设计师和程序员最重要的就是 表现层与业务层的通信
因为设计师负责的是表现层的呈现以及功能,而程序员负责的是业务层以及数据层的功能
只要规范了两层的数据来往规则,就完全可以做到界面与代码分离

表现层与业务层的通信
在本例中,我们使用 Flash 来开发表现层,业务层使用的是 .Net Framework 2.0
Flash 如何与 .Net 后台通信?
在此 Molay 使用的是参数传递,即 Flash 发送一个带或不带变量的浏览器请求给后台程序
后台程序获得该请求后根据情况来执行相应的操作,操作结束再返回给 Flash 一个变量提示操作成功与否。
以下 C# 代码作用为接受来自 Flash 的请求,然后根据请求执行相应的操作

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
		string Action = Request["Action"];
		string OutPut = "";
		switch (Action)
		{
			case "0":
				OutPut = "零";
				break;
			case "1":
				OutPut = "壹";
				break;
			case "2":
				OutPut = "贰";
				break;
			case "3":
				OutPut = "参";
				break;
			case "4":
				OutPut = "肆";
				break;
			case "5":
				OutPut = "伍";
				break;
			case "6":
				OutPut = "陆";
				break;
			case "7":
				OutPut = "漆";
				break;
			case "8":
				OutPut = "捌";
				break;
			case "9":
				OutPut = "玖";
				break;
			default:
				break;
		}
		Response.Write(OutPut);
    }
}

上面的代码,将 Flash 发送的“Action=”个位阿拉伯数字以中文数字输出
将上述代码保存为“Test.aspx.cs”,然后新建一个空的文本文件“Test.aspx”
在该文件中输入“”保存(代码隐藏)
这时在浏览器中访问这个 Test.aspx 文件
例如输入“http://localhost/Test.aspx?Action=3”
则会看到输出“参”

那么 .Net 后台如何与 Flash 通信呢?
如果是小规模的数据,例如操作成功与否等,我们可以就直接输出一个类似浏览器请求的数据:“&var1=XXXX&var2=YYYY”提交给 Flash
如果是大规模的数据呢?例如整站全部信息、RSS 呢?
这时我们就需要用到 Xml 了。对于 Xml 相关的知识,已经超出本文的范畴
大家可以在 WS 上面找到 Xml 的入门与提高教程
以下 Flash 代码加载并解释一个特定的 Xml 文件,并 Trace 输出其中的变量

// 创建变量集合对象
var Param:Object = {};
// 加载Xml
Load_Xml("test.xml");
function Load_Xml(url:String) {
	// 定义XML对象
	var myXML:XML = new XML();
	// 忽略XML文件中多余的空格
	myXML.ignoreWhite = true;
	myXML.onLoad = function(success) {
		if (success) {
			// 开始解释XML数据的函数调用
			ParseXML(myXML);
		} else {
			trace("数据载入失败...");
		}
	};
	myXML.load(url);
}
// 解释数据
function ParseXML(myXML:XML) {
	var temp = myXML.firstChild.childNodes;
	var temp2 = temp[0].attributes;
	for (var i in temp2) {
		Param[i] = temp2[i];
	}
	// 输出参数
	Trace_Msg();
}
// 输出参数
function Trace_Msg() {
	for (var i in Param) {
		trace(i+" = "+Param[i]);
	}
}

Xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<Vnices>
	<Image big_url="pic/big/1.jpg" small_url="pic/small/1.jpg" date="2007-01-01"/>
</Vnices>

下面给大家一个简单的示例,该示例中 FLASH 中用户输入一个字符并选择加密方法
后台将该字符按照选定的加密方式进行加密,然后返回给 FLASH 并在其中显示:
注意:将文件解压缩到你建立的测试虚拟目录下,浏览“index.aspx”文件。
点击下载此文件

四、综合演练—— Flash 信息发布系统

通过上述几节,加上大伙们自己参考了一些关于 .Net 方面的书籍
想必对于表现层与业务层如何通信都有了一定的了解
本节我们通过一个简单的 Flash 信息发布系统来巩固 RIA 的开发制作流程知识:

Step1、总体项目规划
规划是怎么想的,因为老大曾经给我看了一个比较酷的 TheFwa 酷站收录站点
所以我们的这个示例就写这个吧
当然,这个只是教学用的示例,仅仅实现了基本的功能而已,大家可以自己完善

OK,开始模仿TheFwa进行设计:
FLASH向后台发送请求,后台从数据库读取相应的信息并返回为XML给FLASH
FLASH系统的显示功能是分页图象列表,每个图象是一个站点的缩略截图
截图下方是收录日期
移动或者按下,日期变成站点的名称,点击后固定显示
并且旁边一个信息位置显示详细信息
详细信息包括:
URL:网站地址
Company:所属公司
Description:网站描述

管理员可以登陆并修改自己的密码,添加删除更新收录站点的信息
OK,简单的大体功能规划完成了,开始详细的设计,Let’s go!

Step2、数据库设计

表FWC_Config - 该表记录FWC的所有运行参数

  • C_No - 表的自动编号

  • C_ID - 管理员帐号

  • C_Password - 管理员密码

  • C_Row - 图片显示的列数

  • C_Line - 图片显示的行数

表FWC_Site - 该表将记录所有收录网站的信息

  • S_No - 表的自动编号

  • S_Title - 网站的标题

  • S_Image - 网站的缩略图

  • S_URL - 网站的URL

  • S_Company - 网站所属公司

  • S_Description - 网站的描述

  • S_DateTime - 收录时间

Step3、业务层设计

Step4、表现层设计

The FWC(Favourite Website Of China)资源释放处:
Preview Edition
.Net Framework 2.0 Access Edition Release - Source Here
.Net Framework 2.0 SQL2000 Edition Release - Source Here

五、开发中的经验、技巧和注意事项

通过上面的演练,大家对于基础的RIA制作应该有了深刻的认识
在本节中我们将就开发RIA系统需要注意的问题(例如安全和性能)展开讨论
让大家少走弯路,开发出一个性能和效果都一流的RIA系统!