用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
 
具体实现代码如下:
 
     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();
 
       至此,大功告成!

你可能感兴趣的:(.net,VS2005,结构,休闲,三层)