Microsoft Updater Application Block 1.3.2 IDownloader接口设计 [翻译]
来源:互联网 发布:淘宝6度模特小兮 编辑:程序博客网 时间:2024/05/19 00:16
问题描述
为了允许开发人员把他们自己下载器实现嵌入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]
[c#]
IDownloader接口显露出来的方法将在下面讨论:
1. Init方法接收一个XmlNode类型的参数,允许开发人员从应用程序配置文件中传递Xml设置信息。
2. Download方法使用同步方式拷贝单个文件。事实上,该方法是用来从服务器端拷贝manifest文件到客户端的。它提供一个TimeSpan参数,允许开发人员指定一次同步下载动作的超时时间。
3. BeginDownload方法用来启动异步多文件的下载任务,它接收两个字符串数组参数,一个是源文件,一个是目的文件,然后返回一个全球唯一标识号[GUID],该号码将被用于识别下载任务。
4. GetJobStatus方法允许开发人员检查异步下载任务的状态。它接收一个GUID,并返回JobStatus枚举值。JobStatus枚举类型在同一个集合中定义:
[VB.NET]
[C#]
注意:IDownloader接口同样派生于IDisposable接口,所以任何下载器类必须实现IDisposable接口,该接口提供一种通用而有效的释放资源的模式。
为了允许开发人员把他们自己下载器实现嵌入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 IDownloaderInterface IDownloader
Inherits IDisposable
Sub Init()Sub Init (ByVal config As XmlNode)
Sub Download()Sub Download (ByVal sourceFile As String, ByVal destFile As String, _
ByVal maxTimeWait As TimeSpan)
Function BeginDownload()Function BeginDownload (ByVal sourceFile() As String, ByVal destFile() As String) _
As Guid
Function GetJobStatus()Function GetJobStatus (jobId As Guid) As JobStatus
End Interface
Inherits IDisposable
Sub Init()Sub Init (ByVal config As XmlNode)
Sub Download()Sub Download (ByVal sourceFile As String, ByVal destFile As String, _
ByVal maxTimeWait As TimeSpan)
Function BeginDownload()Function BeginDownload (ByVal sourceFile() As String, ByVal destFile() As String) _
As Guid
Function GetJobStatus()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 );
}
{
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 JobStatusEnum JobStatus
Ready
Downloading
[Error]
Cancelled
Validating
End Enum
Ready
Downloading
[Error]
Cancelled
Validating
End Enum
public enum JobStatus
{
Ready,
Downloading,
Error,
Cancelled,
Validating
}
{
Ready,
Downloading,
Error,
Cancelled,
Validating
}
注意:IDownloader接口同样派生于IDisposable接口,所以任何下载器类必须实现IDisposable接口,该接口提供一种通用而有效的释放资源的模式。
- Microsoft Updater Application Block 1.3.2 IDownloader接口设计 [翻译]
- Microsoft Updater Application Block 1.3.2 IDownloader接口设计 [翻译]
- Microsoft Updater Application Block 1.4.2 IValidator接口设计 [翻译]
- Microsoft Updater Application Block 1.4.2 IValidator接口设计 [翻译]
- Microsoft Updater Application Block 1.3.3 BITSDownloader类设计 [翻译]
- Microsoft Updater Application Block 1.3.1 下载器设计 [翻译]
- Microsoft Updater Application Block 1.3.3 BITSDownloader类设计 [翻译]
- Microsoft Updater Application Block 1.3.1 下载器设计 [翻译]
- Microsoft Updater Application Block 1.2.2 ApplicationUpdater assembly设计 [翻译]
- Microsoft Updater Application Block 1.2.2 ApplicationUpdater assembly设计 [翻译]
- Microsoft Updater Application Block IValidator接口设计
- Microsoft Updater Application Block 1.4.3 KeyValidator类设计 [翻译]
- Microsoft Updater Application Block 1.4.1 验证器设计 [翻译]
- Microsoft Updater Application Block 1.1 设计篇 [翻译]
- Microsoft Updater Application Block 1.4.3 KeyValidator类设计 [翻译]
- Microsoft Updater Application Block 1.4.1 验证器设计 [翻译]
- Microsoft Updater Application Block 1.1 设计篇 [翻译]
- Microsoft Updater Application Block 1.3.3 BITSDownloader类设计
- Microsoft Updater Application Block 设计篇
- Microsoft Updater Application Block ApplicationUpdater assembly设计
- Microsoft Updater Application Block 下载器设计
- Java的IO系统
- sco unix基础教材
- Microsoft Updater Application Block 1.3.2 IDownloader接口设计 [翻译]
- Fedora Core 6.0自动更新
- Microsoft Updater Application Block 1.3.3 BITSDownloader类设计
- Microsoft Updater Application Block 1.4.1 验证器设计
- strset,memset,setmem,strstr,strcat,strncat函数原型
- 过河卒
- Microsoft Updater Application Block IValidator接口设计
- 除了Ajax之外难道没有别的方法解决这个问题么?
- Microsoft Updater Application Block KeyValidator类设计