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

具体实现代码如下:

Code
  1public class DataAgent
  2
  3     {
  4
  5 
  6
  7         Variables#region Variables
  8
  9 
 10
 11         private string m_strConnectionString;
 12
 13         private OleDbConnection m_objConnection;
 14
 15 
 16
 17         #endregion Variables
 18
 19 
 20
 21         Functions#region Functions
 22
 23 
 24
 25         DataAgend#region DataAgend
 26
 27         /**//// <summary>
 28
 29         /// Initial Function
 30
 31         /// </summary>
 32
 33         /// <param name="strConnection"></param>
 34
 35         public DataAgent(string strConnection)
 36
 37         {
 38
 39              this.m_strConnectionString = strConnection;
 40
 41         }
 42
 43         #endregion DataAgend
 44
 45 
 46
 47         OpenDataBase#region OpenDataBase
 48
 49         /**//// <summary>
 50
 51         /// function to open data base
 52
 53         /// </summary>
 54
 55         private void OpenDataBase()
 56
 57         {
 58
 59              try
 60
 61              {
 62
 63                   this.m_objConnection = new OleDbConnection();
 64
 65                   this.m_objConnection.ConnectionString = this.m_strConnectionString;
 66
 67 
 68
 69                   if(this.m_objConnection.State != ConnectionState.Open)
 70
 71                   {
 72
 73                       this.m_objConnection.Open();
 74
 75                   }
 76
 77              }
 78
 79              catch(Exception e)
 80
 81              {
 82
 83                   throw e;
 84
 85              }
 86
 87         }
 88
 89         #endregion OpenDataBase
 90
 91 
 92
 93         CloseDataBase#region CloseDataBase
 94
 95         /**//// <summary>
 96
 97         /// the function to cloase data base
 98
 99         /// </summary>
100
101         private void CloseDataBase()
102
103         {
104
105              if(this.m_objConnection != null)
106
107              {
108
109                   if(this.m_objConnection.State == ConnectionState.Open)
110
111                   {
112
113                        this.m_objConnection.Close();
114
115                   }
116
117              }
118
119         }
120
121         #endregion
122
123 
124
125         GetDataView#region GetDataView
126
127         /**//// <summary>
128
129         /// Execute the sql and return the default table view
130
131         /// </summary>
132
133         /// <param name="strSelectString">Select String</param>
134
135         /// <returns>DataView of the DataTable</returns>
136
137         public DataView GetDataView(string strSqlStat)
138
139         {
140
141              try
142
143              {
144
145                   this.OpenDataBase();
146
147                   OleDbDataAdapter objDataAdapter = new OleDbDataAdapter(strSqlStat.Trim(),this.m_objConnection);
148
149                   DataSet objDataSet = new DataSet();
150
151                  objDataAdapter.Fill(objDataSet);
152
153                   return objDataSet.Tables[0].DefaultView;
154
155              }
156
157              catch(Exception e)
158
159              {
160
161                   throw e;
162
163              }
164
165              finally
166
167              {
168
169                   this.CloseDataBase();
170
171              }
172
173         }
174
175         #endregion GetDataTable
176
177         #endregion Functions
178
179 
180
181     }

3.Business的具体实现:

建立名为Base的类,此类作为其他事务类的基类,其中定义了一个DataAgent的实例。其他所有的Business类都从该改类派生。

在该类中添加对DataAgent的引用,使所有的事务类都能使用DataAgent中的方法。

Base.cs源代码:

Code
 1   public abstract class Base
 2
 3     {
 4
 5         DataAgent#region DataAgent
 6
 7         private DataAgent m_objDBAgent;
 8
 9 
10
11         protected DataAgent OleDBAgent
12
13         {
14
15              get
16
17              {
18
19                   if(this.m_objDBAgent == null)
20
21                   {
22
23                       this.m_objDBAgent = this.CreateAgent();
24
25                   }
26
27                   return this.m_objDBAgent;
28
29              }
30
31              set
32
33              {
34
35                   this.m_objDBAgent = value;
36
37              }
38
39         }
40
41         #endregion DataAgent
42
43 
44
45         public Base()
46
47         {
48
49         }
50
51 
52
53         CreateAgent#region CreateAgent
54
55         /**//// <summary>
56
57         /// Create a new DataAgent
58
59         /// </summary>
60
61         /// <returns>the DataAgent</returns>
62
63         private DataAgent CreateAgent()
64
65         {
66
67              string strConnection = ConfigurationSettings.AppSettings["ConnectionString"];
68
69              return new DataAgent(strConnection);
70
71          }
72
73         #endregion CreateAgent
74
75    }

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

Code
 1public class News: Base
 2
 3     {
 4
 5         public News Contact()
 6
 7         {
 8
 9 
10
11         }
12
13 
14
15         public DataView GetNewsList()
16
17         {
18
19              string strSql;
20
21              strSql = "";
22
23              strSql += "   SELECT Top 10 NewsId,NewsTitle ";
24
25              strSql += "     FROM Tb_News";
26
27              strSql += "    WHERE NewsEnable = 1";
28
29              strSql += " ORDER BY NewsId ";
30
31 
32
33              return base.OleDBAgent.GetDataView(strSql);
34
35 
36
37         }
38
39     }

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

4.UI层对Business中接口的调用

首先,在页面中添加对News类的引用。

然后,在页面中添加一个(DataGrid)dgNews用来显示新闻列表。

在Page Behind的Page_Load方法中添加如下代码:

  

1  News objNews = new News();
2
3         this.dgNews.DataSource = objNews.GetNewsList();
4
5    this.dgNews.DataBind();
Code
 1 public abstract class Base
 2
 3     {
 4
 5         DataAgent#region DataAgent
 6
 7         private DataAgent m_objDBAgent;
 8
 9 
10
11         protected DataAgent OleDBAgent
12
13         {
14
15              get
16
17              {
18
19                   if(this.m_objDBAgent == null)
20
21                   {
22
23                       this.m_objDBAgent = this.CreateAgent();
24
25                   }
26
27                   return this.m_objDBAgent;
28
29              }
30
31              set
32
33              {
34
35                   this.m_objDBAgent = value;
36
37              }
38
39         }
40
41         #endregion DataAgent
42
43 
44
45         public Base()
46
47         {
48
49         }
50
51 
52
53         CreateAgent#region CreateAgent
54
55         /**//// <summary>
56
57         /// Create a new DataAgent
58
59         /// </summary>
60
61         /// <returns>the DataAgent</returns>
62
63         private DataAgent CreateAgent()
64
65         {
66
67              string strConnection = ConfigurationSettings.AppSettings["ConnectionString"];
68
69              return new DataAgent(strConnection);
70
71          }
72
73         #endregion CreateAgent
74
75    }

转载于:https://www.cnblogs.com/KivenSun/articles/1434368.html

〈转〉用VS2005.NET进行三层结构应用程序的开发相关推荐

  1. 基于NHibernate的三层结构应用程序开发初步

    本文并不是去详细的介绍如何使用NHibernate,而是通过一个简单的例子来演示基于NHibernate的三层结构应用程序开发过程.关于NHibernate的有关文档,DDL已经做了汉化,但是由于英文 ...

  2. 用MS.NET开发三层结构应用程序[转载]

    用MS.NET开发三层结构应用程序[转载] 原文: http://industry.ccidnet.com/art/294/20030526/47418_1.html 传统两层结构 在过去应用系统开发 ...

  3. MVC三层结构应用程序开发的优缺点

    1.一个典型的应用软件包括展现给用户界面的编码.业务处理模块编码.数据访问处理编码几个部分.如果将这些部分放在一起编程,则应用软件内部各元素耦合性非常高:现在人们常将它们分开开发,然后将它们组装成一个 ...

  4. 浅谈“三层结构”原理与用意(转帖)

    浅谈"三层结构"原理与用意 序 在刚刚步入"多层结构"Web应用程序开发的时候,我阅读过几篇关于"asp.net三层结构开发"的文章.但其多 ...

  5. 《谁还能说〈周易〉读不懂、没读懂?》系列论文(之二):《 象数解读:太极-八卦-序卦 》(吉 华)...

    内容摘要: 本文以<周易>原本解卦系辞的"二进制数理"为解读方法,通过对<系辞传>"<易>有太极-"章的综合分析,说明了由太 ...

  6. 《谁还能说〈周易〉读不懂、没读懂?》系列论文(三):《周易》象数思维方式演绎中国传统文化(吉 华)...

    内容摘要: 本文叙述了<周易>内涵的"象数思维方式"及其相应的"阴阳道德"概念.范畴,说明了<周易>与儒道百家同生于一个思维方式,展示了 ...

  7. 〈大学〉问——王守仁

    <〈大学〉问>原文 问曰:"<大学>者,昔儒以为大人之学矣.敢问大人之学何以在于明明德乎?" 阳明子答曰:"大人者,以天地万物为一体者也.其视天下 ...

  8. 一片幽情冷處濃--解讀納蘭詞〈采桑子〉一首

    一片幽情冷處濃--解讀納蘭詞〈采桑子〉一首 夜讀納蘭詞,及見「夢也何曾到謝橋」之句,驀然但覺一縷輕寒襲上心頭,不勝唏噓:非關秋夜的輕冷蕭疏,而是感受到一份癡情於遭逢生死離別的阻絕下,心香燒盡成灰的蒼涼 ...

  9. 读廖名春之《〈周易〉经传十五讲》

    廖名春. <周易>经传十五讲. ISBN: 978-7-301-21195-3 读过哲学史之后,进阶的阅读材料就是哲学原典.而读哲学原典,自然是不翻译的比翻译过的好.而西方哲学原典大部分是 ...

最新文章

  1. ElasticSearch,Sphinx,Lucene,Solr,Xapian。哪种适合哪种用途? [关闭]
  2. 2020,微服务之死?
  3. django 学习笔记
  4. ITK:在不复制数据的情况下,从图像创建样本列表。
  5. 从MapReduce的执行来看如何优化MaxCompute(原ODPS) SQL
  6. mysql 中caption_Django-Model操作数据库(增删改查、连表结构)(示例代码)
  7. php过去图片宽度,用php调整图片宽高
  8. matlab符号函数绘图法_matlab制图—符号函数(显函数、隐函数和参数方程)画图
  9. matlab通过带通滤波器代码,设计一个matlab带通滤波器代码
  10. 学习笔记 Tianmao 篇 SwipeRefreshLayoyt 下拉刷新 控件 使用
  11. 【思维 | 图论 | 高斯消元】所罗门王的宝藏
  12. 安全狗加入天翼网信安全产业联盟 发挥云安全生态影响力
  13. [Unity]动态人物头像
  14. win凭据添加计算机名,使用Windows凭据管理自动登录局域网的方法
  15. wps word文档复制图片显示不全,只显示一行
  16. 高数 | 旋转体体积的一般公式
  17. 高数 | 复合函数、幂指函数中等价无穷小替换的问题
  18. “天涯棋客”回沪教棋
  19. 「微信将不再提供小程序打开 App 技术服务」带给我的思考
  20. 北斗RDSS卫星短报文通信对构建全国覆盖的应急通信链路的重要作用

热门文章

  1. maven仓库用法与settings.xml配置汇总
  2. xfce4面板消失了解决方案+xfce4的面板保存设置以及读取
  3. win7+ubuntu19.10使用easybcd安装
  4. 《概率论与数理统计习题全解指南》中的“计算机得”
  5. linux中xjvf指令,linux解压缩命令小结
  6. 【数组】 - 有序数组设计
  7. 如何在SAP CRM WebClient UI里创建HANA Live Report
  8. 中国程序员 VS 美国程序员,差距就在这五点
  9. 编程题:带参数的宏定义来实现,求圆的周长和面积。
  10. u-boot.lds 文件分析