〈转〉用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
具体实现代码如下:
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源代码:
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()的方法,该方法用来获取所有的新闻标题列表,代码如下:
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方法中添加如下代码:
2
3 this.dgNews.DataSource = objNews.GetNewsList();
4
5 this.dgNews.DataBind();
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进行三层结构应用程序的开发相关推荐
- 基于NHibernate的三层结构应用程序开发初步
本文并不是去详细的介绍如何使用NHibernate,而是通过一个简单的例子来演示基于NHibernate的三层结构应用程序开发过程.关于NHibernate的有关文档,DDL已经做了汉化,但是由于英文 ...
- 用MS.NET开发三层结构应用程序[转载]
用MS.NET开发三层结构应用程序[转载] 原文: http://industry.ccidnet.com/art/294/20030526/47418_1.html 传统两层结构 在过去应用系统开发 ...
- MVC三层结构应用程序开发的优缺点
1.一个典型的应用软件包括展现给用户界面的编码.业务处理模块编码.数据访问处理编码几个部分.如果将这些部分放在一起编程,则应用软件内部各元素耦合性非常高:现在人们常将它们分开开发,然后将它们组装成一个 ...
- 浅谈“三层结构”原理与用意(转帖)
浅谈"三层结构"原理与用意 序 在刚刚步入"多层结构"Web应用程序开发的时候,我阅读过几篇关于"asp.net三层结构开发"的文章.但其多 ...
- 《谁还能说〈周易〉读不懂、没读懂?》系列论文(之二):《 象数解读:太极-八卦-序卦 》(吉 华)...
内容摘要: 本文以<周易>原本解卦系辞的"二进制数理"为解读方法,通过对<系辞传>"<易>有太极-"章的综合分析,说明了由太 ...
- 《谁还能说〈周易〉读不懂、没读懂?》系列论文(三):《周易》象数思维方式演绎中国传统文化(吉 华)...
内容摘要: 本文叙述了<周易>内涵的"象数思维方式"及其相应的"阴阳道德"概念.范畴,说明了<周易>与儒道百家同生于一个思维方式,展示了 ...
- 〈大学〉问——王守仁
<〈大学〉问>原文 问曰:"<大学>者,昔儒以为大人之学矣.敢问大人之学何以在于明明德乎?" 阳明子答曰:"大人者,以天地万物为一体者也.其视天下 ...
- 一片幽情冷處濃--解讀納蘭詞〈采桑子〉一首
一片幽情冷處濃--解讀納蘭詞〈采桑子〉一首 夜讀納蘭詞,及見「夢也何曾到謝橋」之句,驀然但覺一縷輕寒襲上心頭,不勝唏噓:非關秋夜的輕冷蕭疏,而是感受到一份癡情於遭逢生死離別的阻絕下,心香燒盡成灰的蒼涼 ...
- 读廖名春之《〈周易〉经传十五讲》
廖名春. <周易>经传十五讲. ISBN: 978-7-301-21195-3 读过哲学史之后,进阶的阅读材料就是哲学原典.而读哲学原典,自然是不翻译的比翻译过的好.而西方哲学原典大部分是 ...
最新文章
- ElasticSearch,Sphinx,Lucene,Solr,Xapian。哪种适合哪种用途? [关闭]
- 2020,微服务之死?
- django 学习笔记
- ITK:在不复制数据的情况下,从图像创建样本列表。
- 从MapReduce的执行来看如何优化MaxCompute(原ODPS) SQL
- mysql 中caption_Django-Model操作数据库(增删改查、连表结构)(示例代码)
- php过去图片宽度,用php调整图片宽高
- matlab符号函数绘图法_matlab制图—符号函数(显函数、隐函数和参数方程)画图
- matlab通过带通滤波器代码,设计一个matlab带通滤波器代码
- 学习笔记 Tianmao 篇 SwipeRefreshLayoyt 下拉刷新 控件 使用
- 【思维 | 图论 | 高斯消元】所罗门王的宝藏
- 安全狗加入天翼网信安全产业联盟 发挥云安全生态影响力
- [Unity]动态人物头像
- win凭据添加计算机名,使用Windows凭据管理自动登录局域网的方法
- wps word文档复制图片显示不全,只显示一行
- 高数 | 旋转体体积的一般公式
- 高数 | 复合函数、幂指函数中等价无穷小替换的问题
- “天涯棋客”回沪教棋
- 「微信将不再提供小程序打开 App 技术服务」带给我的思考
- 北斗RDSS卫星短报文通信对构建全国覆盖的应急通信链路的重要作用
热门文章
- maven仓库用法与settings.xml配置汇总
- xfce4面板消失了解决方案+xfce4的面板保存设置以及读取
- win7+ubuntu19.10使用easybcd安装
- 《概率论与数理统计习题全解指南》中的“计算机得”
- linux中xjvf指令,linux解压缩命令小结
- 【数组】 - 有序数组设计
- 如何在SAP CRM WebClient UI里创建HANA Live Report
- 中国程序员 VS 美国程序员,差距就在这五点
- 编程题:带参数的宏定义来实现,求圆的周长和面积。
- u-boot.lds 文件分析