本文主要记录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

 

posted on 2009-05-04 22:10  xiejiangwei  阅读(367)  评论(0编辑  收藏  举报