看PETSHP及DU7后的想法

类别:.NET开发 点击:0 评论:0 推荐:


//数据库访问的想法:
//1.按照数据库表中的表定义一个接口,比如Customer-->ICustomer,Orders-->IOrders,Account-->IAccount
//  示例代码[来自PetShop&Du7]:
   using System;
namespace MySystem.IDAL
{
 /// <summary>
 /// Inteface for the Account DAL
 /// </summary>
 public interface IAccount
 {
  /// <summary>
  /// Authenticate a user
  /// </summary>
  /// <param name="userId">Unique identifier for a user</param>
  /// <param name="password">Password for the user</param>
  /// <returns>Details about the user who has just logged in</returns>
  AccountInfo SignIn(string userId, string password);
  //AccountInfo 登录后返回的信息,数据量返回少的形式用这种格式
    
  /// <summary>
        ///     Retrieves a book for a specified Account id.
        ///     <param name="AccountId">Id of Account to retrieve from database.</param>
        ///     <retvalue>AccountData, a dataset containing detailed Account information.</retvalue>
        /// </summary>
  AccountData GetAccountById(int AccountId);
  //AccountData 根据查询得到的信息,信息数据量多并要由DataGrid显示时,用这种格式
      
  /// <summary>
  /// Update an account in the database
  /// </summary>
  /// <param name="Account">Account information to update</param>
  void Update(AccountInfo Account); 

 }
}
//其它表的接口,和以上的类似
//2.定义工厂
//示例代码[来自PetShop&Du7]:
using System;
using System.Reflection;
using System.Configuration;

namespace MySystem.DALFactory {
 
 /// <summary>
 /// Factory implementaion for the Account DAL object
 /// </summary>
 public class Account
 {
  public static MySystem.IDAL.IAccount Create()
  {   
   /// Look up the DAL implementation we should be using
   string path = System.Configuration.ConfigurationSettings.AppSettings["DAL"];
   string className = path + ".Account";

   // Using the evidence given in the config file load the appropriate assembly and class
   return (MySystem.IDAL.IAccount) Assembly.Load(path).CreateInstance(className);
  }
 }
}
//3.实现接口
//示例代码[来自PetShop&Du7]:
using System;
using System.Data;
using System.Data.SqlClient;
using PetShop.Model;
using MySystem.IDAL;

namespace MySystem.SQLServerDAL {
 /// <summary>
 /// Summary description for AccountDALC.
 /// </summary>
 public class Account : IAccount{

  public Account(){
  }

  /// <summary>
  /// Verify the users login credentials against the database
  /// If the user is valid return all information for the user
  /// </summary>
  /// <param name="userId">Username</param>
  /// <param name="password">password</param>
  /// <returns></returns>
  public AccountInfo SignIn(string userId, string password)
  {           
    
   return new AccountInfo();
    
  }

  /// <summary>
  /// Return the address information for a user
  /// </summary>
  /// <param name="userId"></param>
  /// <returns></returns>
  public AccountData GetAccountById(string accountId) {
   
   AccountData account= null;
   return account;
  }


  /// <summary>
  /// Update an account in the database
  /// </summary>
  /// <param name="myAccount">Updated account parameters, you must supply all parameters</param>
  public void Update(AccountInfo myAccount)
  {
   
  }

 
    
 }
}

//4.定义表的DataSet

namespace MySystem.Data
{
    using System;
    using System.Data;
 using System.Runtime.Serialization;  
   
    public class AccountData : DataSet
    {
     public const String ACCOUNT_TABLE       = "Accounts";
     public const String PKID_FIELD       = "PKId";
     public const String ACCOUNTNAME_FIELD    = "AccountName";
     
        public enum SearchTypeEnum
        {
            /// <summary>
            ///     Id search.
            /// </summary>
            ID = 0,
            /// <summary>
            ///     AccountName search.
            /// </summary>
            AccountName = 1
           
        }
       
       
        /// <summary>
        ///     Constructor to support serialization.
        ///     <remarks>Constructor that supports serialization.</remarks>
        ///     <param name="info">The SerializationInfo object to read from.</param>
        ///     <param name="context">Information on who is calling this method.</param>
        /// </summary>
        private AccountData(SerializationInfo info, StreamingContext context) : base(info, context)
        {  
        }  
       
        /// <summary>
        ///     Constructor for AccountData. 
        ///     <remarks>Initialize a AccountData instance by building the table schema.</remarks>
        /// </summary>
        public BookData()
        {
            //
            // Create the tables in the dataset
            //
            BuildDataTables();
        }
       
        //----------------------------------------------------------------
        // Sub BuildDataTables:
        //   Creates the following datatables: Account
        //----------------------------------------------------------------
        private void BuildDataTables()
        {
            //
            // Create the Books table
            //
            DataTable table   = new DataTable(ACCOUNT_TABLE);
            DataColumnCollection columns = table.Columns;
           
            columns.Add(PKID_FIELD, typeof(System.Int32));
            columns.Add(ACCOUNTNAME_FIELD, typeof(System.Int32));
           
           
            this.Tables.Add(table);
        }
      
//定义表Info
using System;
namespace MySystem.Data {

 /// <summary>
 /// Business entity used to model accounts
 /// </summary>
 [Serializable]
 public class AccountInfo {

  // Internal member variables
  private string _Id;
  private string _accountname;
  

  /// <summary>
  /// Default constructor
  /// </summary>
  public AccountInfo() {
  }

  public AccountInfo(string Id, string accountname)
   this._Id = Id;
   this._accountname = accountname;
   
  }

  // Properties
  public string AccountId {
   get { return _Id; }
  }
  public string AccountName {
   get { return _accountname; }
  }
  
 }
}
//5.前台调用
using MySystem.IDAL;

namespace MySystem.BLL {


 public class Account
 {
  
  public AccountInfo SignIn(string userId, string password) {

   // Validate input
   if ((userId.Trim() == string.Empty) || (password.Trim() == string.Empty))
    return null;

   // Get an instance of the account DAL using the DALFactory
   IAccount dal = PetShop.DALFactory.Account.Create();

   // Try to sign in with the given credentials
   AccountInfo account = dal.SignIn(userId, password);

   // Return the account
   return account;
  }

  /// <summary>
  /// Returns the address information for a specific user
  /// </summary>
  /// <param name="userId">Unique identifier for an account/customer</param>
  /// <returns>Returns the address information for the user</returns>
  public AddressInfo GetAddress(string userId)
  {

   // Validate input
   if (userId.Trim() == string.Empty)
    return null;
   
   // Get an instance of the account DAL using the DALFactory
   IAccount dal = PetShop.DALFactory.Account.Create();

   // Return the address information for the given userId from the DAL
   return dal.GetAddress(userId);
  }

  
 }
}

本文地址:http://com.8s8s.com/it/it42961.htm