淺析電子商務的框架_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:解讀多語言開發的個人體驗
      在文章的前面,先定義一下,這里談的語言(A)指的是語言以及使用該語言可以很容易調用的基本類庫及可免費或低代價獲得的第三方類庫及開源類庫(B)。在很多情況下談語言和談語言的選擇時的語境,都是指的B。 選擇多語言混合開發的一個目的是為了使用其中某

      前些陣子照著《Pro ASP.NET 2.0 E-Commerce in C#2005》書編輯了一個商務系統網站,想總結一下學習到的所學的知識。

      該網站具有一般商務網站的特征

      這里先講講他的框架

      數據訪問層

      用的的存儲過程操作數據庫的存儲,有一個Shop.DataAccess類庫專門(注意我這里將原文的命名空間改為shop了)

      該類庫使用了一個組件來封裝對數據庫的操作 為 Microsoft Data Access Application Block, 其實就是將SQLHelper.cs復制到該類下就行了,該類可以自動管理存儲過程的連接,參數和名稱。

      類庫下的DataAccessBase類是一個基類,該類庫幾乎所有的類都會繼承它,有兩個屬性一個是存儲過程,以及返回數據庫的連接字符串

      注意:這里是從web.config文件中獲取與數據庫連接的字符串,但是在類中無法引用到Configuration類,所以我們要額外的添加引用System.Configuration.dll程序集

      以下為引用的內容:
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Configuration;

      namespace Shop.DataAccess
      {
          
      public class DataAccessBase
          {
              
      //存儲過程的名稱
              protected string StoredprocedureName { setget; }

              
      //獲得連接字符串
              protected string ConnectionString
              {
                  
      get
                  {
                      
      return ConfigurationManager.ConnectionStrings["db_shopConnectionString"].ToString();
                  }
              }
          }

      }

      類庫中的StoreProcedure類

      利用枚舉存儲編寫的存儲過程名稱,這樣便于更改及管理

      但是對于存儲過程很多,一個類來存儲肯定顯得不夠,個人建議在細分,控制一個類中的存儲過程不超過20個

      例如:

      StoreProcedure_User,StoreProcedure_Product,StoreProcedure_Orders

      以下為引用的內容:
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;

      namespace Shop.DataAccess
      {
          
      public class StoredProcedure
          {
              
      public enum Name
              {
                  ProductByID_Select,
                  Products_Select,
                  Products_SelectSerach,
                  ShoppingCart_Select,
                  ShoppingCart_Insert,
                  ShoppingCart_Update,
                  ShoppingCart_Delete,
                  EndUser_Insert,
                  EndUserLogin_Select,
                  Address_Select,
                  ContactInformation_Select,
                  AdminLogin_Select,
                  Product_Insert,
                  ProductCategory_Select,
                  Product_Update,
                  Orders_Select,
                  OrderDetails_Select,
                  OrderAll_Select,
                  OrderStatus_Select,
                  OrdersByID_Select,
                  Orders_Update,
                  ProductPromotion_Select
              }
          }
      }

       

       

       

      類庫中的DataBaseHelper類

      重新包裝了SQLHelper類的功能,因為并不是所有SQLHelper類功能我們都會用到,我們只應用到了一小部分

      以下為引用的內容:
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Data.SqlClient;
      using Microsoft.ApplicationBlocks.Data;
      using System.Data;

      namespace Shop.DataAccess
      {
          
      public class DataBaseHelper:DataAccessBase
          {
              
      public  SqlParameter[] Parameters { getset; }

              
      /// <summary>
              
      /// 構造函數
              
      /// </summary>
              
      /// <param name="storedproceducename">賦值存儲過程</param>
              public DataBaseHelper(string storedproceducename)
              {
                  
      this.StoredprocedureName = storedproceducename;
              }

              
      /// <summary>
              
      /// 無數據返回
              
      /// </summary>
              
      /// <param name="transaction"></param>
              public void Run(SqlTransaction transaction)
              {
                  SqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, 
      this.StoredprocedureName, this.Parameters);
              }

              
      /// <summary>
              
      /// 無數據返回,自己提供參數
              
      /// </summary>
              
      /// <param name="transaction"></param>
              
      /// <param name="Parameters">參數</param>
              public void Run(SqlTransaction transaction, SqlParameter[] Parameters)
              {
                  SqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, 
      this.StoredprocedureName, Parameters);
              }

              
      /// <summary>
              
      /// 有參數返回(DataSet)
              
      /// </summary>
              
      /// <param name="connectionstring"></param>
              
      /// <param name="parameters"></param>
              
      /// <returns></returns>
              public DataSet Run(string connectionstring, SqlParameter[] parameters)
              {
                  DataSet ds;
                  ds 
      = SqlHelper.ExecuteDataset(connectionstring, this.StoredprocedureName, parameters);
                  
      return ds;
              }

              
      /// <summary>
              
      /// 返回第一行第一列的值
              
      /// </summary>
              
      /// <param name="connectionstring"></param>
              
      /// <param name="parameters"></param>
              
      /// <returns></returns>
              public object RunScalar(string connectionstring, SqlParameter[] parameters)
              {
                  
      object obj;
                  obj 
      = SqlHelper.ExecuteScalar(connectionstring, this.StoredprocedureName, parameters);
                  
      return obj;
              }

              
      /// <summary>
              
      /// 返回第一行第一列的值
              
      /// </summary>
              
      /// <param name="transaction"></param>
              
      /// <param name="parameters"></param>
              
      /// <returns></returns>
              public object RunScalar(SqlTransaction transaction, SqlParameter[] parameters)
              {
                  
      object obj;
                  obj 
      = SqlHelper.ExecuteScalar(transaction, this.StoredprocedureName, parameters);
                  
      return obj;
              }

              
      /// <summary>
              
      /// 無參數返回(DataSet)
              
      /// </summary>
              
      /// <param name="connectionstring"></param>
              
      /// <returns></returns>
              public DataSet Run(string connectionstring)
              {
                  DataSet ds;
                  ds 
      = SqlHelper.ExecuteDataset(connectionstring, CommandType.StoredProcedure, this.StoredprocedureName);
                  
      return ds;
              }

              
      /// <summary>
              
      /// 無返回值
              
      /// </summary>
              public void Run()
              {
                  SqlHelper.ExecuteNonQuery(
      base.ConnectionString, CommandType.StoredProcedure, this.StoredprocedureName, this.Parameters);
              }

              
      /// <summary>
              
      /// 返回是SqlDataReader
              
      /// </summary>
              
      /// <param name="parameters"></param>
              
      /// <returns></returns>
              public SqlDataReader Run(SqlParameter[] parameters)
              {
                  SqlDataReader dr;
                  dr 
      = SqlHelper.ExecuteReader(base.ConnectionString, CommandType.StoredProcedure, this.StoredprocedureName, parameters);
                  
      return dr;
              }
          }
      }

      業務邏輯層

      Shop.BusinessLogic

      這里涉及到要編寫接口

      首先了解下什么是接口,接口就是只包含抽象成員的應用類型,接口中的成員可以是方法,索引器,屬性和事件,而不可以是包含任何常量,構造函數,靜態成員或數據字段。接口只包含這些成員的聲明。而具體的實現必須從實現該接口的任何類中進行初始化。

      這里編輯一個接口是因為所有該類庫的類都會調用一個函數來實現獲得數據

      以下為引用的內容:
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;

      namespace Shop.BusinessLogic
      {
          
      interface IBusinessLogic
          {
              
      void Invoke();
          }
      }

      Shop.Common類庫是編寫一個公共類

      Shop.Operational自定義一些類

       

      分享:解析ASP.NET Routing對請求的處理方式
      原本這是《關于ASP.NET Routing的幾點內容》一文中的一節,不過等寫完這節之后發現這塊內容已經比較完整了,而且它本身也是獨立和最為常見的部分,因此我把它提取出來單獨成文。至于那片文章的其他部分我會再修改一下,明天發布。希望這些內容會對您理解ASP.

      來源:模板無憂//所屬分類:.Net教程/更新時間:2009-12-08
      相關.Net教程