基於統一外掛程式介面的WEB程式設計

來源:互聯網
上載者:User
 檔案名稱:User.cs
  using System;
  using System.Data;
  using System.Data.OleDb;
  //using clubstar.IPlug;
  using clubstar;
  namespace clubstar.IPlug.DataOp
  {
  public struct UserTable //使用者表結構變數
  {
   public int id; //
   public int sessionid;
   public string name;
   public string nickname; //
   public string password; //
   public bool sex; //
   public DateTime birthday; //
   public string city; //
   public int weight; //
   public int height; //
   public string education; //
   public int bloodtype; //
   public string xingzuo;
   public bool marry;
   public string job; //
   public string favorstar; //
   public string favordo; //
   public string introduce; //
   public string email; //
   public DateTime joindate; //
   public DateTime logindate; //
   public int rank; //
  
   public string mobilephone; //
   public string pic; //
   public string pic_id; //
   public int jifen; //
   public int renqi; //
   public int acceptwho; //
  }
  /// <summary>
  /// User 的摘要說明。
  /// </summary>
  ///
  public class User: IPlugStarClub
  {
  
   public ConnDB_Op UserTable=ConnDB_Op.Instance(); //調用單體模式進行資料庫的串連
  
   protected string SqlString="";
   public User()
   {
  
  
   }
  
   public User(string sql)
   {
   SqlString=sql;
  
   }
   #region IPlugStarClub Members
   /// <summary>
   /// 返回調用外掛程式的名稱
   /// </summary>
   public string Name
   {
   get
   {
   //return "User_Plugin:使用者表外掛程式";
   return "clubstar.IPlug.DataOp.User";
   }
   }
   /// <summary>
   ///使用者表操作
   /// </summary>
   /// <param name="context"></param>
   public OleDbDataReader PerformSelect (IPlugSql sql)
   {
   //sql.SqlString=SqlString;
   return UserTable.ExecuteReader(sql.SqlString);
   }
   public void PerformDelete (IPlugSql sql)
   {
   //sql.SqlString=SqlString;
   UserTable.ExecuteNonQuery(sql.SqlString);
   }
   public void PerformInsert (IPlugSql sql)
   {
   //sql.SqlString=SqlString;
   UserTable.ExecuteNonQuery(sql.SqlString);
   }
  
   public void PerformUpdate (IPlugSql sql)
   {
   //sql.SqlString=SqlString;
   UserTable.ExecuteNonQuery(sql.SqlString);
   }
   #endregion
  }
  }
  其中關於資料庫連接類的寫法如下
  檔案名稱:ConnDB_Op.cs
  using System;
  using System.Data;
  using System.Data.SqlClient;
  using System.Data.OleDb;
  using System.Configuration;
  namespace clubstar.IPlug.DataOp
  {
  /// <summary>
  /// ConnDB_Op 的摘要說明。
  /// 採用 Facade 外觀設計模式以封裝所有與資料庫相關的操作
  /// </summary>
  public class ConnDB_Op
  {
   private OleDbDataAdapter da=new OleDbDataAdapter();
   private DataSet ds=new DataSet();
   private OleDbCommand cmd=new OleDbCommand();
   public OleDbConnection MyConn;
   public OleDbDataReader dr;
   public string SqlString="";
   public string StrConn="Provider=SQLOLEDB;"+ConfigurationSettings.AppSettings["clubstar"];
  
   //資料庫連接採用Singleton 模式,只能通過Instance()來建立該類的唯一執行個體
   private static ConnDB_Op conndb_op = null;
   public static ConnDB_Op Instance()
   {
   if (null == conndb_op)
   conndb_op = new ConnDB_Op();
   return conndb_op;
   }
   private ConnDB_Op(string strconn,string sqlstring)
   {
   StrConn=strconn;
   SqlString=sqlstring;
   }
   private ConnDB_Op()
   {
  
   }........
  如下的檔案用於實際處理外掛程式的操作
  檔案名稱:PluginSectionHandler.cs
  using System;
  using System.Xml;
  using System.Configuration;
  using clubstar.IPlug;
  namespace clubstar
  {
  /// <summary>
  /// This class implements IConfigurationSectionHandler and allows
  /// us to parse the "plugin" XML nodes found inside App.Config
  /// and return a PluginCollection object
  /// </summary>
  public class PluginSectionHandler:IConfigurationSectionHandler
  {
   public PluginSectionHandler()
   {
  
   }
   #region IConfigurationSectionHandler Members
   /// <summary>
   /// Iterate through all the child nodes
   /// of the XMLNode that was passed in and create instances
   /// of the specified Types by reading the attribite values of the nodes
   /// we use a try/Catch here because some of the nodes
   /// might contain an invalid reference to a plugin type
   /// </summary>
   /// <param name="parent"></param>
   /// <param name="configContext"></param>
   /// <param name="section">The XML section we will iterate against</param>
   /// <returns></returns>
   ///
   public System.Web.HttpResponse dai;
   public object Create(object parent, object configContext, System.Xml.XmlNode section)
   {
   PluginCollection plugins = new PluginCollection();
   foreach(XmlNode node in section.ChildNodes)
   {
  
   try
   {
   //Use the Activator class's 'CreateInstance' method
   //to try and create an instance of the plugin by
   //passing in the type name specified in the attribute value
   object plugObject = Activator.CreateInstance(Type.GetType(node.Attributes["type"].Value));//讀取WEBCONFIG中的相應配置節
  
   //Cast this to an IPlugin interface and add to the collection
   IPlugStarClub plugin = (IPlugStarClub)plugObject;
   plugins.Add(plugin);
  
   }
   catch
   {
   //Catch any exceptions
   //but continue iterating for more plugins
   //dai.Write(section.ChildNodes.Count.ToString());
   throw;
   }
  
   }
  
  
   return plugins;
   }
   #endregion
  }
  }
  而如下檔案用於擷取外掛程式的名字資訊:
  檔案名稱:PlugSqlOp.cs
  using System;
  using clubstar.IPlug;
  namespace clubstar
  {
  /// <summary>
  /// UserOp 的摘要說明。
  /// </summary>
  public class PlugSqlOp:IPlugSql
  {
   private string m_User="";
   public PlugSqlOp(string user)
   {
   m_User = user;
   }
   #region PlugSqlOp Members
   public string SqlString
   {
   get
   {
   return m_User;
   }
   set
   {
   m_User = value;
   }
   }
   #endregion
  }
  }

下面就是實際調用的程式原檔案
  using System;
  using System.Collections;
  using System.ComponentModel;
  using System.Drawing;
  using System.Web;
  using System.Web.SessionState;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.UI.HtmlControls;
  using System.Text;
  using clubstar.IPlug;
  using clubstar.IPlug.DataOp;
  using clubstar.uc;
  using clubstar.DataOp;
  namespace clubstar
  {
  /// <summary>
  /// WebForm1 的摘要說明。
  /// </summary>
  public class InsertUser : System.Web.UI.Page
  {
   protected System.Web.UI.WebControls.Button Button1;
   protected System.Web.UI.WebControls.Button Button2;
   public RandomNum SessionID;
   private void Page_Load(object sender, System.EventArgs e)
   {
   Common dai=new Common();
  
   //session("verifycode")=rndnum
   //Response.Write(SessionID.Text.ToString());
  
   this.Button1.Click += new System.EventHandler(OnPluginClick);
  
   }
  
   public delegate void PerformInsert(string plugname,StringBuilder sql);
   private void OnPluginClick(object sender,EventArgs args)
   {
  
   StringBuilder sql=new StringBuilder();
   sql.Append("insert into clubuser (ID,sessionID,username) values (2,'123123','fuck')");
   Common InsertUser=new Common();
   PerformInsert Insert=new PerformInsert(InsertUser.PerformInsert);
   Insert("clubstar.IPlug.DataOp.User",sql); //調用外掛程式所代理的方法
  
   }
  
   #region Web Form設計器產生的代碼
   override protected void OnInit(EventArgs e)
   {
   //
   // CODEGEN: 該調用是 ASP.NET Web Form設計器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
   }
  
   /// <summary>
   /// 設計器支援所需的方法 - 不要使用代碼編輯器修改
   /// 此方法的內容。
   /// </summary>
   private void InitializeComponent()
   {
   this.Button2.Click += new System.EventHandler(this.Button2_Click);
   this.Load += new System.EventHandler(this.Page_Load);
   }
   #endregion
   private void Button2_Click(object sender, System.EventArgs e)
   {
  }
  }
  }
  而上面檔案中的PerformInsert代理針對如下事件函數進行操作
  using System;
  using System.Configuration;
  using clubstar.IPlug;
  using System.Text;
  using System.Data.OleDb;
  namespace clubstar
  {
  /// <summary>
  /// Common 的摘要說明。
  /// </summary>
  public class Common
  {
   public Common()
   {
  
   }
   private PluginCollection m_plugins = null; //被回調用於對外掛程式進行插入操作
   public void PerformInsert(string plugname,StringBuilder sql) //執行插入操作
   {
   m_plugins = (PluginCollection )ConfigurationSettings.GetConfig("IPlugs");
   PlugSqlOp context = new PlugSqlOp(sql.ToString());
   foreach(IPlugStarClub plugin in m_plugins)
   {
   if(plugin.Name==plugname)
   {
   plugin.PerformInsert(context);
   return ;
   }
   }
   }
   public void PerformDelete(string plugname,StringBuilder sql)//執行刪除操作
   {
   m_plugins = (PluginCollection )ConfigurationSettings.GetConfig("IPlugs");
   PlugSqlOp context = new PlugSqlOp(sql.ToString());
   foreach(IPlugStarClub plugin in m_plugins)
   {
   if(plugin.Name==plugname)
   {
   plugin.PerformDelete(context);
   return ;
   }
   }
   }
   public void PerformUpdate(string plugname,StringBuilder sql)//執行更新操作
   {
   m_plugins = (PluginCollection )ConfigurationSettings.GetConfig("IPlugs");
   PlugSqlOp context = new PlugSqlOp(sql.ToString());
   foreach(IPlugStarClub plugin in m_plugins)
   {
   if(plugin.Name==plugname)
   {
   plugin.PerformUpdate(context);
   return ;
   }
   }
   }
   private OleDbDataReader dr;
   public OleDbDataReader PerformSelect(string plugname,StringBuilder sql)//執行查詢操作
   {
   //OleDbDataReader dr=new OleDbDataReader();
   m_plugins = (PluginCollection )ConfigurationSettings.GetConfig("IPlugs");
   PlugSqlOp context = new PlugSqlOp(sql.ToString());
   foreach(IPlugStarClub plugin in m_plugins)
   {
   if(plugin.Name==plugname)
   {
   dr=plugin.PerformSelect(context);
   return dr;
   }
   }
   return dr;
   }
  
   //如何使用上面的功能:先在前端檔案中產生如下代理:
   //public delegate void PerformInsert(string plugname,StringBuilder sql);
   //public delegate void PerformDelete(string plugname,StringBuilder sql);
   //public delegate OleDbDataReader PerformSelect(string plugname,StringBuilder sql);
   //public delegate void PerformUpdate(string plugname,StringBuilder sql);
   /* 插入樣本
   StringBuilder sql=new StringBuilder();
   sql.Append("insert into clubuser (ID,sessionID,username) values (2,'123123','fuck')");
   Common InsertUser=new Common();
   PerformInsert Insert=new PerformInsert(InsertUser.PerformInsert);
   Insert("clubstar.IPlug.DataOp.User",sql); //調用外掛程式所代理的方法
   */
   /* 刪除樣本
   StringBuilder sql=new StringBuilder();
   sql.Append("delete from clubuser where ID=2");
   Common DeleteUser=new Common();
   PerformDelete Delete=new PerformDelete(DeleteUser.PerformDelete);
   Delete("clubstar.IPlug.DataOp.User",sql); //調用外掛程式所代理的方法
   */
  
   /* 查詢樣本
   StringBuilder sql=new StringBuilder();
   sql.Append("select * from clubuser where ID=2");
   Common SelectUser=new Common();
   PerformSelect Select=new PerformSelect(SelectUser.PerformSelect);
   dr=Select("clubstar.IPlug.DataOp.User",sql); //調用外掛程式所代理的方法
  
  
   do{
   Response.Write(dr["username"].ToString()+"<br>");
   Response.Write(dr["nickname"].ToString()+"<br><br>");
   }
   while(dr.Read());
   */
   /* 更新樣本
   StringBuilder sql=new StringBuilder();
   sql.Append("update clubuser set ID=3 where ID=2");
   Common UpdateUser=new Common();
   PerformUpdate Update=new PerformUpdate(UpdateUser.PerformUpdate);
   Update("clubstar.IPlug.DataOp.User",sql); //調用外掛程式所代理的方法
   */
  }
  }
  最後,只需要在WEBCONFIG中寫入外掛程式的資訊就可以調用前面所寫的外掛程式了:
  <?xml version="1.0" encoding="utf-8" ?>
  <configuration>
   <configSections>
   <section name="IPlugs" type="clubstar.PluginSectionHandler, clubstar" />
  </configSections>
   <IPlugs>
   <plugin type="clubstar.IPlug.DataOp.User" />
  
  </IPlugs>.........

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.