现在的位置: 首页 > 综合 > 正文

Microsoft Updater Application Block 1.3.2 IDownloader接口设计 [翻译]

2013年04月11日 ⁄ 综合 ⁄ 共 1909字 ⁄ 字号 评论关闭
问题描述
    为了允许开发人员把他们自己下载器实现嵌入Updater Application Block,DownloaderManager类中的用于定义下载器类型的公共接口必须暴露给开发人员。

设计目标、问题
1. IDownloader接口的最显著的设计目标是,它必须提供一个方法,该方法能够从一个位置向另一个位置拷贝文件。
2. 为了得到最优的性能和效率,Updater Application Block的开发人员决定提供一个方法,该方法可以完成多个文件的拷贝功能。
3. 为了提供更有效率的下载支持,该接口必须鼓励开发人员通过暴露一种机制实现异步下载动作,该机制可以启动异步下载动作,并获得下载状态。
4. 最后,为了有更好的扩展性,该接口应该允许从应用程序配置文件获得初始化参数,并传给下载器。

解决方案描述
IDownloader接口构成了创建下载器类的基础,它将暴露出以下四个方法:
1. Init —— 用于初始化下载器
2. Download —— 用于下载单个文件
3. BeginDownload —— 用于启动多文件下载任务
4. GetJobStatus —— 用于获得一个异步拷贝动作的状态

具体实现
IDownloader接口位于Microsoft.ApplicationBlocks.ApplicationUpdater.Interfaces命名空间里,实现如下:

[VB.NET]

Public Interface IDownloader
  
Inherits IDisposable

  
Sub Init (ByVal config As XmlNode)

  
Sub Download (ByVal sourceFile As StringByVal destFile As String, _
                
ByVal maxTimeWait As TimeSpan)

  
Function BeginDownload (ByVal sourceFile() As StringByVal destFile() As String) _
    
As Guid

  
Function GetJobStatus (jobId As Guid) As JobStatus
End Interface

[c#]

public interface IDownloader : IDisposable
{
  
void Init( XmlNode config );

  
void Download( string sourceFile, string destFile, TimeSpan maxTimeWait );

  Guid BeginDownload( 
string[] sourceFile, string[] destFile );

  JobStatus GetJobStatus( Guid jobId );
}

IDownloader接口显露出来的方法将在下面讨论:
1. Init方法接收一个XmlNode类型的参数,允许开发人员从应用程序配置文件中传递Xml设置信息。
2. Download方法使用同步方式拷贝单个文件。事实上,该方法是用来从服务器端拷贝manifest文件到客户端的。它提供一个TimeSpan参数,允许开发人员指定一次同步下载动作的超时时间。
3. BeginDownload方法用来启动异步多文件的下载任务,它接收两个字符串数组参数,一个是源文件,一个是目的文件,然后返回一个全球唯一标识号[GUID],该号码将被用于识别下载任务。
4. GetJobStatus方法允许开发人员检查异步下载任务的状态。它接收一个GUID,并返回JobStatus枚举值。JobStatus枚举类型在同一个集合中定义:
[VB.NET]

Public Enum JobStatus
  Ready
  Downloading
  [
Error]
  Cancelled
  Validating
End Enum

[C#]

public enum JobStatus

  Ready, 
  Downloading, 
  Error, 
  Cancelled, 
  Validating
}

注意:IDownloader接口同样派生于IDisposable接口,所以任何下载器类必须实现IDisposable接口,该接口提供一种通用而有效的释放资源的模式。 

抱歉!评论已关闭.