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

news/2024/7/5 5:40:37
  VS2005.NET进行三层结构应用程序的开发

1.三层之间的关系:

三层是指:界面显示层(UI),业务逻辑层(Business),数据操作层(Data Access)

文字描述:

ClientsUI进行操作,UI调用Business进行相应的运算和处理,Business通过Data AccessData Base进行操作。

  优点:

1、增加了代码的重用。Data Access可在多个项目中公用;Business可在同一项目的不同地方使用(如某个软件B/SC/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

         ///

         /// Initial Function

         ///

         ///

         public DataAgent(string strConnection)

         {

              this.m_strConnectionString = strConnection;

         }

         #endregion DataAgend

 

         #region OpenDataBase

         ///

         /// function to open data base

         ///

         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

         ///

         /// the function to cloase data base

         ///

         private void CloseDataBase()

         {

              if(this.m_objConnection != null)

              {

                   if(this.m_objConnection.State == ConnectionState.Open)

                   {

                        this.m_objConnection.Close();

                   }

              }

         }

         #endregion

 

         #region GetDataView

         ///

         /// Execute the sql and return the default table view

         ///

         /// Select String

         /// DataView of the DataTable

         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

         ///

         /// Create a new DataAgent

         ///

         /// the DataAgent

         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 BehindPage_Load方法中添加如下代码:

 

         News objNews = new News();

         this.dgNews.DataSource = objNews.GetNewsList();

    this.dgNews.DataBind();

 

       至此,大功告成!





http://www.niftyadmin.cn/n/3652875.html

相关文章

Linux之目录结构和文件管理

Linux之目录结构和文件管理一. Linux目录结构1. 目录与文件管理2. 常见子目录二. 查看文件内容1. 查看文件内容:cat2. 查看文件内容:more3. 查看文件内容:less4. 查看文件内容 : head 、tail5. 统计文件内容:wc6. 检索和过滤文件内…

VS.NET2005安装部署之实战

相信很多人都做过安装程序,目前最大功能最全的当属InstallShield,但是InstallShield的语法学习起来实在费劲,相对而言vs.net自带的安装部署短小精悍,且使用C#语法,对于一般C#开发者来说使用起来就极为简便,…

ASP.NET AJAX 之服务器端页面流程

很明显的,ScriptManager 和 UpdatePanel 是ASP.NET AJAX中最重要的2个类。 用Reflector查看Microsoft.Web.Extensions.dll 里的类时,发现有很多个接口,譬如象IHtmlForm,IHttpBrowserCapabilities,IHttpCachePolicy&…

.Net服务组件(ServicedComponent)简介及其使用

.Net服务组件(ServicedComponent)简介及其使用.NET Enterprise Services 为企业应用程序提供重要的基础结构。COM 为企业环境中部署的组件编程模型提供服务结构。System.EnterpriseServices命名空间向 .NET 对象提供对 COM 服务的访问,COM 服…

Linux账号权限的管理

Linux账号权限管理一. 用户账号和组账号概述1. Linux基于用户身份对资源访问进行控制1. 用户账号2. 组账号3. UID和GID2. 用户账号文件/etc/passwd1. 保存用户名称、宿主目录、登录shell等基本信息3. 用户账号文件/etc/shadow1. 保存用户的密码、账号有效期等信息4. 添加用户账…

如何检测Remote Objects是否部署成功

在调试.Net Remoting程序时,经常会出现一些莫名其妙的问题,IDE提示的异常信息有时也不一定正确。很多时候都是自己粗心,配置configuration文件上出了问题,包括Client和Server端的配置文件。  言归正传,这里看看如何检…

Linux 磁盘设备文件管理

Linux 磁盘设备文件管理一. 磁盘结构1. 磁盘物理结构2. 磁盘数据结构3. 硬盘的存储容量4. 磁盘接口类型5. MBR与磁盘分区表示6. 磁盘分区结构二. 文件系统类型1. XFS文件系统2. SWAP交换文件系统3. Linux支持的其他文件系统类型三、创建新的磁盘1. 查看或管理磁盘分区&#xff…

socket异步处理问题

由于一个项目要和第三方软件做接口,第三方软件是Unix的操作系统,所以用了Socket来传输数据。具体结构是这样的:本项目作为服务器端,第三方软件是客户端,并且有多个客户端。通常情况下,要开多个线程来处理多…