一三层之间的关系三层是指界面显示层(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();
至此大功告成!