1.三层之间的关系:
三层是指:界面显示层(UI),业务逻辑层(Business),数据操作层(Data Access)
文字描述:
Clients
对
UI
进行操作,
UI
调用
Business
进行相应的运算和处理,
Business
通过
Data Access
对
Data Base
进行操作。
优点:
1
、增加了代码的重用。
Data Access
可在多个项目中公用;
Business
可在同一项目的不同地方使用(如某个软件
B/S
和
C/S
部分可以共用一系列的
Business
组件)。
2
、使得软件的分层更加明晰,便于开发和维护。美工人员可以很方便地设计
UI
设计,并在其中调用
Business
给出的接口,而程序开发人员则可以专注的进行代码的编写和功能的实现。
2.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
/// <summary>
/// Initial Function
/// </summary>
/// <param name="strConnection"></param>
public DataAgent(string strConnection)
{
this.m_strConnectionString = strConnection;
}
#endregion
DataAgend
#region
OpenDataBase
/// <summary>
/// function to open data base
/// </summary>
private void OpenDataBase()
{
try
{
this.m_objConnection = new OleDbConnection();
this.m_objConnection.ConnectionString = this.m_strConnectionString;
if(this.m_objConnection.State != ConnectionState.Open)
{
this.m_objConnection.Open();
}
}
catch(Exception e)
{
throw e;
}
}
#endregion
OpenDataBase
#region
CloseDataBase
/// <summary>
/// the function to cloase data base
/// </summary>
private void CloseDataBase()
{
if(this.m_objConnection != null)
{
if(this.m_objConnection.State == ConnectionState.Open)
{
this.m_objConnection.Close();
}
}
}
#endregion
#region
GetDataView
/// <summary>
/// Execute the sql and return the default table view
/// </summary>
/// <param name="strSelectString">Select String</param>
/// <returns>DataView of the DataTable</returns>
public DataView GetDataView(string strSqlStat)
{
try
{
this.OpenDataBase();
OleDbDataAdapter objDataAdapter = new OleDbDataAdapter(strSqlStat.Trim(),this.m_objConnection);
DataSet objDataSet = new DataSet();
objDataAdapter.Fill(objDataSet);
return objDataSet.Tables[0].DefaultView;
}
catch(Exception e)
{
throw e;
}
finally
{
this.CloseDataBase();
}
}
#endregion
GetDataTable
#endregion
Functions
}
3.Business的具体实现:
建立名为
Base
的类,此类作为其他事务类的基类,其中定义了一个
DataAgent
的实例。其他所有的
Business
类都从该改类派生。
在该类中添加对
DataAgent
的引用,使所有的事务类都能使用
DataAgent
中的方法。
Base.cs
源代码:
public abstract class Base
{
#region
DataAgent
private DataAgent m_objDBAgent;
protected DataAgent OleDBAgent
{
get
{
if(this.m_objDBAgent == null)
{
this.m_objDBAgent = this.CreateAgent();
}
return this.m_objDBAgent;
}
set
{
this.m_objDBAgent = value;
}
}
#endregion
DataAgent
public Base()
{
}
#region
CreateAgent
/// <summary>
/// Create a new DataAgent
/// </summary>
/// <returns>the DataAgent</returns>
private DataAgent CreateAgent()
{
string strConnection = ConfigurationSettings.AppSettings["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 10 NewsId,NewsTitle ";
strSql += " FROM Tb_News";
strSql += " WHERE NewsEnable = 1";
strSql += " ORDER BY NewsId ";
return base.OleDBAgent.GetDataView(strSql);
}
}
由于数据库结构比较简单,在此就不再给出详细的表结构。
4.UI层对Business中接口的调用
首先,在页面中添加对
News
类的引用。
然后,在页面中添加一个
(DataGrid)dgNews
用来显示新闻列表。
在
Page Behind
的
Page_Load
方法中添加如下代码:
News objNews = new News();
this.dgNews.DataSource = objNews.GetNewsList();
this.dgNews.DataBind();
至此,大功告成!