熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

VS2005.NET進行三層結構應用程序的開發

2013-11-13 10:28:09  來源: .NET編程 
三層之間的關系

  三層是指界面顯示層(UI)業務邏輯層(Business)數據操作層(Data Access)

  文字描述

  Clients對UI進行操作UI調用Business進行相應的運算和處理Business通過Data Access對Data Base進行操作

  優點

  增加了代碼的重用Data Access可在多個項目中公用Business可在同一項目的不同地方使用(如某個軟件B/S和C/S部分可以共用一系列的Business組件)

  使得軟件的分層更加明晰便於開發和維護美工人員可以很方便地設計UI設計並在其中調用Business給出的接口而程序開發人員則可以專注的進行代碼的編寫和功能的實現

  Data Access的具體實現

  DataAgent類型中變量和方法的說明

  

  private string m_strConnectionString; //連接字符串
private OleDbConnection m_objConnection; //數據庫連接
public DataAgent(string strConnection) //構造方法傳入的參數為連接字符串
private void OpenDataBase() //打開數據庫連接
private void #region CloseDataBase() //關閉數據庫連接
public DataView GetDataView(string strSqlStat) //根據傳入的連接字符串返回DataView

  具體實現代碼如下

  

  

  public class DataAgent
{
#region Variables

  private string m_strConnectionString;
private OleDbConnection m_objConnection;

  #endregion Variables
#region Functions
#region DataAgend
///


/// Initial Function
///

///
public DataAgent(string strConnection)
{
thism_strConnectionString = strConnection;
}
#endregion DataAgend
#region OpenDataBase
///
/// function to open data base
///

private void OpenDataBase()
{
try
{
thism_objConnection = new OleDbConnection();
thism_objConnectionConnectionString = thism_strConnectionString;
if(thism_objConnectionState != ConnectionStateOpen)
{
thism_objConnectionOpen();
}
}

  catch(Exception e)
{
throw e;
}
}

  #endregion OpenDataBase
#region CloseDataBase

  ///


/// the function to cloase data base
///

  private void CloseDataBase()
{
if(thism_objConnection != null)
{
if(thism_objConnectionState == ConnectionStateOpen)
{
thism_objConnectionClose();
}
}
}

  #endregion
#region GetDataView

  ///


/// Execute the sql and return the default table view
///

///

  Select String


/// DataView of the DataTable

  public DataView GetDataView(string strSqlStat)
{
try
{
thisOpenDataBase();
OleDbDataAdapter objDataAdapter =

  new OleDbDataAdapter(strSqlStatTrim()thism_objConnection);
DataSet objDataSet = new DataSet();
objDataAdapterFill(objDataSet);
return objDataSetTables[]DefaultView;
}

  catch(Exception e)
{
throw e;
}
finally
{
thisCloseDataBase();
}
}

  #endregion GetDataTable
#endregion Functions
}

  Business的具體實現

  建立名為Base的類此類作為其他事務類的基類其中定義了一個DataAgent的實例其他所有的Business類都從該改類派生

  在該類中添加對DataAgent的引用使所有的事務類都能使用DataAgent中的方法

  Basecs源代碼

  

  

  public abstract class Base
{
#region DataAgent
private DataAgent m_objDBAgent;
protected DataAgent OleDBAgent
{
get
{
if(thism_objDBAgent == null)
{
thism_objDBAgent = thisCreateAgent();
}
return thism_objDBAgent;
}

  set
{
thism_objDBAgent = value;
}
}

  #endregion DataAgent
public Base()
{
}

  #region CreateAgent
///


/// Create a new DataAgent
///

/// the DataAgent

  private DataAgent CreateAgent()
{
string strConnection =

  ConfigurationSettingsAppSettings[ConnectionString];
return new DataAgent(strConnection);
}
#endregion CreateAgent
}

  准備好了數據操作層和事務層的基類底下就可以正式地開始業務邏輯類的開發了如有一個顯示新聞的類News其中包含了一個GetNewsLsit()的方法該方法用來獲取所有的新聞標題列表代碼如下

  

  

  public class News: Base
{
public News Contact()
{
}

  public DataView GetNewsList()
{
string strSql;
strSql = ;
strSql +=    SELECT Top NewsIdNewsTitle ;
strSql +=      FROM Tb_News;
strSql +=     WHERE NewsEnable = ;
strSql += ORDER BY NewsId ;

  return baseOleDBAgentGetDataView(strSql);
}
}

  由於數據庫結構比較簡單在此就不再給出詳細的表結構

  UI層對Business中接口的調用

  首先在頁面中添加對News類的引用

  然後在頁面中添加一個(DataGrid)dgNews用來顯示新聞列表

  在Page Behind的Page_Load方法中添加如下代碼

  

  News objNews = new News();
thisdgNewsDataSource = objNewsGetNewsList();
thisdgNewsDataBind();

  至此大功告成!


From:http://tw.wingwit.com/Article/program/net/201311/13752.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.