本文主要记录Gadget相关开发、项目架构和项目中使用到的一些关键技术。
项目名称: Gadget桌面帮助系统
开发环境:
VS 2008
Silverlight 3.0 Beta
Sql Server2005
主要技术:
DonNet Framework 3.5
Linq To Xml
Silverlight
Ajax
WebService
项目概述:
在Vista中,微软提供了一种新的桌面应用程序类型,Gadget。
它可以很方面的安装(卸载)在SideBar中,例如Vista附带的桌面小即时贴、天气预报等。微软的官方介绍文档中对Gadget的开发是这样描述的:只要您会用HTML或XML编写网页来构成 Gadgets 的外观,用 JavaScript来设计 Gadgets 的逻辑。
如果将来微软的操作系统仍然能够占据主导地位,Gadget也许会成为另一个很大的市场。
说到开发,写脚本语言的确是很牛的事情,但调试的过程是在让我头大,所以还是选择了Silverlight作为UI的呈现平台,进而采用C#进行业务的逻辑的开发。
这个项目的主要目的是基于掌握的微软新技术(Silverlight + Gadget),以及相应的应用平台和附加插件,在Mobile手机与PC桌面上实现一套集成提醒、审批、数据实时查询等功能的应用程序,改变既有系统受地域、操作环境制约的不足,使工作流变得更加及时高效。
代码详情:
程序行总数: 15586 (共129个文件)
代码行总数: 11715 (74.74%)
注释行总数: 1762 (11.24%)
空白行总数: 2198 (14.02%)
代码注释率: 13.07%
架构介绍:
主要采用的设计模式是(Bridge)桥接模式。
主要类库说明:
1 Implementor抽象类:用于定制角色的所有的方法接口
public abstract class Implementor
{
/// <summary>
/// 执行数据库查询
/// </summary>
abstract public DataTable SQlDBDataQuery()
}
2 WSAbstractionClass类: 抽象化角色,保存一个对实现化对象的引用
public class WSAbstractionClass
{
protected Implementor implementor;
// Properties
public Implementor Implementor
{
set { implementor = value; }
}
/// <summary>
/// 执行数据库查询
/// </summary>
virtual public void SQlDBDataQuery()
{
implementor.SQlDBDataQuery();
}
}
3 WSRefinedAbstractionClass : 扩展抽象化角色,改变和修正父类(WSAbstractionClass)对抽象化的定义
public class WSRefinedAbstractionClass : WSAbstractionClass
{
// Methods
override public void SQlDBDataQuery()
{
implementor.SQlDBDataQuery();
}
}
4 WSConcreteImplementorClass :桥接模式中,角色接口方法的具体实现 . 对于不同的客户,可以衍生出多个类似的新类,用于进行不同的业务逻辑
public class WSConcreteImplementorForSymbio : Implementor
{
/// <summary>
/// 执行数据库查询
/// </summary>
override public DataTable SQlDBDataQuery()
{
//具体实现
}
}
5 WebServiceForImplementor
public class WebServiceForImplementor: System.Web.Services.WebService
{
[WebMethod]
public DataTable SQlDBDataQuery()
{
// Create implementation and call function
WSAbstractionClass abstraction = new WSRefinedAbstractionClass();
abstraction.Implementor = new WSConcreteImplementorClass();
abstraction.SQlDBDataQuery();
}
}
数据流向:
在数据读取的过程中并没有将WebService直接添加到Silverlight的引用中,而是使用了Javascript调用WebService的方式。这样Service的地址可以直接写在一个配置文件中,方便将来的改写。
Javascript调用WebService:
// Create SoapBody ---- Begin ------
var soapMessage, soapData;
soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
soapMessage += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance/" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema/" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope//">";
soapMessage += "<soap:Body>";
soapData = "<"+ methodName +" xmlns=\"http://tempuri.org//">";
soapData += params;
soapData += "</" + methodName + ">";
soapMessage += soapData + "</soap:Body></soap:Envelope>";
// Create SoapBody ---- End ------
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.Open("POST", WS_URL, false);
xmlhttp.SetRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlhttp.SetRequestHeader("SOAPAction", "http://tempuri.org/" + methodName);
xmlhttp.send(soapMessage);
产出物:
Written By: Xiejiangwei
MSN : pop-steward@hotmail.com