基于统一插件接口的WEB程序设计

由于前一阵子自学设计模式时看到了一些很不错的代码,但基于JAVA的代码居多,后来在微软的网站上下载了一个C#写的采用插件更新的软件(具体链接记不得了,以后会贴上的).所以自已就动了用插件开发WEB站点程序的念头,但是在网上进行搜索后没有找到相关的文章,我就闭门写了一些,发表在这里,希望大家多多指教.
本文基本上的设计结构是插件模式,对于每一个数据库表,都有一个插件相对应,但对方便起见,真是将其写成.CS的文件格式,并在WEBCONFIG配置文件中加以声明,如下就是全局接口文件[请原谅我的术语并不标准],
文件名:IPlugStarClub.cs
using System;
using System.Data;
using System.Data.OleDb;

namespace clubstar.IPlug
{
///

1<summary>   
2/// IPlugStarClub 的摘要说明。   
3/// </summary>

public interface IPlugStarClub
{
string Name{get;} //所调用的PLUG的名字,如用户类或朋友类等
OleDbDataReader PerformSelect (IPlugSql sql);
void PerformDelete (IPlugSql sql);
void PerformInsert (IPlugSql sql);
void PerformUpdate (IPlugSql sql);
}

}
按接口的定义要求,下面是的IPlugSql文件
文件名:IPlugSql.cs
using System;

namespace clubstar.IPlug
{
///

1<summary>   
2/// IPlugSql 的摘要说明。   
3/// </summary>

public interface IPlugSql
{
string SqlString{get;set;}
}

}

而如下的文件是在接口文件运行时的收集与操作类[我是这么认为]:[此处的代码就是前面所说的那个软件中的代码,我原版引用了 ]
文件名:PluginCollection.cs
using System;
using System.Collections;

namespace clubstar.IPlug
{
//This class was generated using CodeSmith ( http://www.ericjsmith.net/codesmith/ )
///

1<summary>   
2/// Represents a collection of <see cref="IPlugin">IPlugin</see> objects.   
3/// </summary>

public class PluginCollection: CollectionBase
{
///

1<summary>   
2/// Initializes a new instance of the <see cref="PluginCollection">PluginCollection</see> class.   
3/// </summary>

public PluginCollection()
{
}

///

1<summary>   
2/// Initializes a new instance of the <see cref="PluginCollection">PluginCollection</see> class containing the elements of the specified source collection.   
3/// </summary>

///

1<param name="value"/>

A

1<see cref="PluginCollection">PluginCollection</see>

with which to initialize the collection.
public PluginCollection(PluginCollection value)
{
this.AddRange(value);
}

///

1<summary>   
2/// Initializes a new instance of the <see cref="PluginCollection">PluginCollection</see> class containing the specified array of <see cref="IPlugin">IPlugin</see> objects.   
3/// </summary>

///

1<param name="value"/>

An array of

1<see cref="IPlugin">IPlugin</see>

objects with which to initialize the collection.
public PluginCollection(IPlugStarClub[] value)
{
this.AddRange(value);
}

///

1<summary>   
2/// Gets the <see cref="PluginCollection">PluginCollection</see> at the specified index in the collection.   
3/// <para>   
4/// In C#, this property is the indexer for the <see cref="PluginCollection">PluginCollection</see> class.   
5/// </para>   
6/// </summary>

public IPlugStarClub this[int index]
{
get {return ((IPlugStarClub)(this.List[index]));}
}

public int Add(IPlugStarClub value)
{
return this.List.Add(value);
}

///

1<summary>   
2/// Copies the elements of the specified <see cref="IPlugin">IPlugin</see> array to the end of the collection.   
3/// </summary>

///

1<param name="value"/>

An array of type

1<see cref="IPlugin">IPlugin</see>

containing the objects to add to the collection.
public void AddRange(IPlugStarClub[] value)
{
for (int i = 0; (i < value.Length); i = (i + 1))
{
this.Add(value[i]);
}
}

///

1<summary>   
2/// Adds the contents of another <see cref="PluginCollection">PluginCollection</see> to the end of the collection.   
3/// </summary>

///

1<param name="value"/>

A

1<see cref="PluginCollection">PluginCollection</see>

containing the objects to add to the collection.
public void AddRange(PluginCollection value)
{
for (int i = 0; (i < value.Count); i = (i + 1))
{
this.Add((IPlugStarClub)value.List[i]);
}
}

///

1<summary>   
2/// Gets a value indicating whether the collection contains the specified <see cref="PluginCollection">PluginCollection</see>.   
3/// </summary>

///

1<param name="value"/>

The

1<see cref="PluginCollection">PluginCollection</see>

to search for in the collection.
///

1<returns><b>true</b> if the collection contains the specified object; otherwise, <b>false</b>.</returns>

public bool Contains(IPlugStarClub value)
{
return this.List.Contains(value);
}

///

1<summary>   
2/// Copies the collection objects to a one-dimensional <see cref="T:System.Array">Array</see> instance beginning at the specified index.   
3/// </summary>

///

1<param name="array"/>

The one-dimensional

1<see cref="T:System.Array">Array</see>

that is the destination of the values copied from the collection.
///

1<param name="index"/>

The index of the array at which to begin inserting.
public void CopyTo(IPlugStarClub[] array, int index)
{
this.List.CopyTo(array, index);
}

///

1<summary>   
2/// Creates a one-dimensional <see cref="T:System.Array">Array</see> instance containing the collection items.   
3/// </summary>

///

1<returns>Array of type IPlugin</returns>

public IPlugStarClub[] ToArray()
{
IPlugStarClub[] array = new IPlugStarClub[this.Count];
this.CopyTo(array, 0);

return array;
}

///

1<summary>   
2/// Gets the index in the collection of the specified <see cref="PluginCollection">PluginCollection</see>, if it exists in the collection.   
3/// </summary>

///

1<param name="value"/>

The

1<see cref="PluginCollection">PluginCollection</see>

to locate in the collection.
///

1<returns>The index in the collection of the specified object, if found; otherwise, -1.</returns>

public int IndexOf(IPlugStarClub value)
{
return this.List.IndexOf(value);
}

public void Insert(int index, IPlugStarClub value)
{
List.Insert(index, value);
}

public void Remove(IPlugStarClub value)
{
List.Remove(value);
}

///

1<summary>   
2/// Returns an enumerator that can iterate through the <see cref="PluginCollection">PluginCollection</see> instance.   
3/// </summary>

///

1<returns>An <see cref="PluginCollectionEnumerator">PluginCollectionEnumerator</see> for the <see cref="PluginCollection">PluginCollection</see> instance.</returns>

public new PluginCollectionEnumerator GetEnumerator()
{
return new PluginCollectionEnumerator(this);
}

///

1<summary>   
2/// Supports a simple iteration over a <see cref="PluginCollection">PluginCollection</see>.   
3/// </summary>

public class PluginCollectionEnumerator : IEnumerator
{
private IEnumerator _enumerator;
private IEnumerable _temp;

///

1<summary>   
2/// Initializes a new instance of the <see cref="PluginCollectionEnumerator">PluginCollectionEnumerator</see> class referencing the specified <see cref="PluginCollection">PluginCollection</see> object.   
3/// </summary>

///

1<param name="mappings"/>

The

1<see cref="PluginCollection">PluginCollection</see>

to enumerate.
public PluginCollectionEnumerator(PluginCollection mappings)
{
_temp = ((IEnumerable)(mappings));
_enumerator = _temp.GetEnumerator();
}

///

1<summary>   
2/// Gets the current element in the collection.   
3/// </summary>

public IPlugStarClub Current
{
get {return ((IPlugStarClub)(_enumerator.Current));}
}

object IEnumerator.Current
{
get {return _enumerator.Current;}
}

///

1<summary>   
2/// Advances the enumerator to the next element of the collection.   
3/// </summary>

///

1<returns><b>true</b> if the enumerator was successfully advanced to the next element; <b>false</b> if the enumerator has passed the end of the collection.</returns>

public bool MoveNext()
{
return _enumerator.MoveNext();
}

bool IEnumerator.MoveNext()
{
return _enumerator.MoveNext();
}

///

1<summary>   
2/// Sets the enumerator to its initial position, which is before the first element in the collection.   
3/// </summary>

public void Reset()
{
_enumerator.Reset();
}

void IEnumerator.Reset()
{
_enumerator.Reset();
}
}
}
}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus