c#

位置:IT落伍者 >> c# >> 浏览文章

VS2005.NET进行三层结构应用程序的开发


发布日期:2022年11月13日
 
VS2005.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();

至此大功告成!

               

上一篇:.NET独有的精巧泛型设计模式

下一篇:用.Net开发DB2应用程序比较