Rovan

      一个犁牛半块田,收也凭天,荒也凭天, 清茶淡饭饱三餐,早也香甜,晚也香甜, 布衣得暖胜丝绵,长也可穿,短也可穿, 草舍茅屋有几间,行也安然,待也安然, 雨过天青驾小船,鱼在一边,酒在一边, 夜归儿女话灯前,今也有言,古也有言, 日上三竿我独眠,请是神仙,我是神仙.

首页 新随笔 联系 订阅 管理
漫谈嘛,就是慢慢地谈了,我打算写一个连载,讲述一下我的感想。

这一站是写我对三层结构的看法,主要是以asp.net,SQL Server为例,暂时不涉及winform应用,和其它的数据库。

近来三层结构好像很火,我也看了一些介绍、资料、代码。感觉只是一个理论上的东西,和实际应用还是差了很远,尤其是执行效率和开发速度上更是需要注意。

三层结构一般的说法是:表示层(UI层)、业务逻辑层、数据层,那么这三层里都放些什么呢?或者说哪些代码应该放在哪一层里?


表示层没有甚么争议了,就是放html代码,加上一些绑定了什么的。

业务层,从字面上看是放业务逻辑,先放在这里暂且不谈。

数据层就有所分歧,一个是“死”的数据层,针对某一个项目而写的,无法直接用到其他的项目里;一个是通用数据层(或是叫数据层基类)。他提供一套通用的方法,比如SQLHelper类。

说到这里,提出第一个问题:存储过程属于哪一层?存储过程嘛,放在数据库里的,应该是属于数据层,但是在存储过程里面写什么,是由业务逻辑来决定的,那就应该算作业务层。??到底该属于哪一层呢?


我的结构是通道模式,当然也有分层的思想。

简略地说就是 表现层 通道 存储过程 数据库 。 其中通道 就是一些通用的方法,比如通用的数据层、翻页控件等。

具体地说就是

1. .aspx 页面 html代码,web控件,页面排版等
2. .aspx.cs 提取数据,绑定到控件

3. .cs 业务逻辑,只在逻辑很复杂,或是会在两处或多处使用的函数,比如用户登录、判断用户是否登录、是否有权限。

4 .dll 通用数据层、常用函数、服务器控件(现在已经实现的是翻页控件、无刷新级联列表) 、提供连接字符串。

5. 存储过程

6. 数据库 保存数据、提供数据


看着是不是有点乱?其实是很方便的。1、2相当于表示层,3相当于业务逻辑层,4.是我说的“通道”,5、6即产上算作是数据层吧:)

5、6 不管你用什么结构都是要写的; 4 调试好了之后就不用修改的;3 里面的东东是不多的,目前还没有遇到需要很多代码来实现的逻辑;1、2 就是页面了,也是必须一写的。

首先要注意一点:asp.net(.net2.0还不是太熟,暂且不考虑)采用了代码后置的方法,这实际上也就是分了一层出来,大多数情况下没有必要再单独出一个.cs文件出来。如果有在多处使用的代码——比如身份验证——就要提取出来放在一个.cs文件里面,便于修改。

/// <summary>
/// 取得最新的贴子
/// </summary>
/// <returns></returns>
public DataSet GetNewrestThreads()
{
OleDbConnection OleCon=new OleDbConnection(Globals.ConnectString);
OleDbCommand OleCmd=new OleDbCommand();
OleCmd.CommandText="Forum_GetNewrestThreads";
OleCmd.CommandType=System.Data.CommandType.StoredProcedure;
OleCmd.Connection=OleCon;
return Common.Data.DataProvider.GetDataSetOle(OleCmd);
}

//Common.Data.DataProvider 是它的数据层

看到一些事例,在业务层里写这样的代码,出一看我还以为是数据层呢。业务层里的每一个函数都要定义Connection Command 这样的对象,是不是很浪费代码呀?

用我的数据层的话只需要两行就可以了。

Jyk.Dal add = new Jyk.Dal();
DataSet ds = add.runSPDataSet("Forum_GetNewrestThreads");

而代码很短直接写在.aspx.cs文件里面就可以了,没有必要写在.cs文件里。

我一直没有弄明白业务层里写什么,通过今天的思考,总算是弄清楚了。

业务逻辑呢实际上是两部分组成的,一个是实现业务逻辑;一个是决定在什么地方调用什么逻辑。

逻辑实现呢,大多是在存储过程里面实现了,简单得呢也可以用直接用查询语句实现。
下一个问题呢,从规范的角度来讲呢,应该是放在一个.cs文件里的,但是呢由于我的数据层已经很强大了,大大的简化了代码量,可以直接写在表示层里面。.cs文件只放一些在多处使用的业务逻辑。

posted on 2006-07-06 12:26  Ruxuan  阅读(339)  评论(0编辑  收藏  举报