您的位置:首页 > 其它

怎样用VS2005进行三层结构应用程序的开发

2007-10-19 07:36 393 查看
用VS2005.NET进行三层结构应用程序的开发
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

具体实现代码如下:

[align=left] public class DataAgent[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] #region Variables[/align]
[align=left] [/align]
[align=left] private string m_strConnectionString;[/align]
[align=left] private OleDbConnection m_objConnection;[/align]
[align=left] [/align]
[align=left] #endregion Variables[/align]
[align=left] [/align]
[align=left] #region Functions[/align]
[align=left] [/align]
[align=left] #region DataAgend[/align]
[align=left] ///<summary>[/align]
[align=left] /// Initial Function[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="strConnection"></param>[/align]
[align=left] public DataAgent(string strConnection)[/align]
[align=left] {[/align]
[align=left] this.m_strConnectionString = strConnection;[/align]
[align=left] }[/align]
[align=left] #endregion DataAgend[/align]
[align=left] [/align]
[align=left] #region OpenDataBase[/align]
[align=left] ///<summary>[/align]
[align=left] /// function to open data base[/align]
[align=left] ///</summary>[/align]
[align=left] private void OpenDataBase()[/align]
[align=left] {[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] this.m_objConnection = new OleDbConnection();[/align]
[align=left] this.m_objConnection.ConnectionString = this.m_strConnectionString;[/align]
[align=left] [/align]
[align=left] if(this.m_objConnection.State != ConnectionState.Open)[/align]
[align=left] {[/align]
[align=left] this.m_objConnection.Open();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] catch(Exception e)[/align]
[align=left] {[/align]
[align=left] throw e;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] #endregion OpenDataBase[/align]
[align=left] [/align]
[align=left] #region CloseDataBase[/align]
[align=left] ///<summary>[/align]
[align=left] /// the function to cloase data base[/align]
[align=left] ///</summary>[/align]
[align=left] private void CloseDataBase()[/align]
[align=left] {[/align]
[align=left] if(this.m_objConnection != null)[/align]
[align=left] {[/align]
[align=left] if(this.m_objConnection.State == ConnectionState.Open)[/align]
[align=left] {[/align]
[align=left] this.m_objConnection.Close();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] #endregion[/align]
[align=left] [/align]
[align=left] #region GetDataView[/align]
[align=left] ///<summary>[/align]
[align=left] /// Execute the sql and return the default table view[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="strSelectString">Select String</param>[/align]
[align=left] ///<returns>DataView of the DataTable</returns>[/align]
[align=left] public DataView GetDataView(string strSqlStat)[/align]
[align=left] {[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] this.OpenDataBase();[/align]
[align=left] OleDbDataAdapter objDataAdapter = new OleDbDataAdapter(strSqlStat.Trim(),this.m_objConnection);[/align]
[align=left] DataSet objDataSet = new DataSet();[/align]
[align=left] objDataAdapter.Fill(objDataSet);[/align]
[align=left] return objDataSet.Tables[0].DefaultView;[/align]
[align=left] }[/align]
[align=left] catch(Exception e)[/align]
[align=left] {[/align]
[align=left] throw e;[/align]
[align=left] }[/align]
[align=left] finally[/align]
[align=left] {[/align]
[align=left] this.CloseDataBase();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] #endregion GetDataTable[/align]
[align=left] #endregion Functions[/align]
[align=left] [/align]
}

3.Business的具体实现:
建立名为Base的类,此类作为其他事务类的基类,其中定义了一个DataAgent的实例。其他所有的Business类都从该改类派生。
在该类中添加对DataAgent的引用,使所有的事务类都能使用DataAgent中的方法。

Base.cs源代码:

[align=left] public abstract class Base[/align]
[align=left] {[/align]
[align=left] #region DataAgent[/align]
[align=left] private DataAgent m_objDBAgent;[/align]
[align=left] [/align]
[align=left] protected DataAgent OleDBAgent[/align]
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
[align=left] if(this.m_objDBAgent == null)[/align]
[align=left] {[/align]
[align=left] this.m_objDBAgent = this.CreateAgent();[/align]
[align=left] }[/align]
[align=left] return this.m_objDBAgent;[/align]
[align=left] }[/align]
[align=left] set[/align]
[align=left] {[/align]
[align=left] this.m_objDBAgent = value;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] #endregion DataAgent[/align]
[align=left] [/align]
[align=left] public Base()[/align]
[align=left] {[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] #region CreateAgent[/align]
[align=left] ///<summary>[/align]
[align=left] /// Create a new DataAgent[/align]
[align=left] ///</summary>[/align]
[align=left] ///<returns>the DataAgent</returns>[/align]
[align=left] private DataAgent CreateAgent()[/align]
[align=left] {[/align]
[align=left] string strConnection = ConfigurationSettings.AppSettings["ConnectionString"];[/align]
[align=left] return new DataAgent(strConnection);[/align]
[align=left] }[/align]
[align=left] #endregion CreateAgent[/align]
}

准备好了数据操作层和事务层的基类,底下就可以正式地开始业务逻辑类的开发了,如有一个显示新闻的类News,其中包含了一个GetNewsLsit()的方法,该方法用来获取所有的新闻标题列表,代码如下:

[align=left] public class News: Base[/align]
[align=left] {[/align]
[align=left] public News Contact()[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public DataView GetNewsList()[/align]
[align=left] {[/align]
[align=left] string strSql;[/align]
[align=left] strSql = "";[/align]
[align=left] strSql += " SELECT Top 10 NewsId,NewsTitle ";[/align]
[align=left] strSql += " FROM Tb_News";[/align]
[align=left] strSql += " WHERE NewsEnable = 1";[/align]
[align=left] strSql += " ORDER BY NewsId ";[/align]
[align=left] [/align]
[align=left] return base.OleDBAgent.GetDataView(strSql);[/align]
[align=left] [/align]
[align=left] }[/align]
}

由于数据库结构比较简单,在此就不再给出详细的表结构。

4.UI层对Business中接口的调用
首先,在页面中添加对News类的引用。
然后,在页面中添加一个(DataGrid)dgNews用来显示新闻列表。
在Page Behind的Page_Load方法中添加如下代码:

[align=left] News objNews = new News();[/align]
[align=left] this.dgNews.DataSource = objNews.GetNewsList();[/align]
this.dgNews.DataBind();

至此,大功告成!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: