学习asp.net也差不多快有一年了吧,但是对三层架构一点也不明白,一直迷迷糊糊,不知如何下手,因为不明白,做东西也从来都不用的,
一直想把三层弄明白了,各位哥哥姐姐,你们当时是怎么学会的啊?能否支两招,(推荐一些比较好的材料,如果有简单适应的小例子就更好了)
让我这个基本什么都不会的能看明白了,将不胜感激!!谢谢了先,分数不多了,有分必加
解决方案 »
- 一条sql语句的困惑?
- gridview 的PagerSettings-FirstPageText 怎么没效了?
- 哪位帮忙看下这个方法啊,执行的时候即使输入与表中相同的ID也显示执行成功
- 動態生成TABLE 按每一行的值動態 合幷單元格 并賦值
- 100分!请问web程序出现异常如何继续执行?
- 求教将web.config中cookieless="true"后FreeTextBox无法使用
- 新手提问了~~为什么本地可以测试~上传服务器就不行了~?
- 为什么.net提供的服务端控件,比如:<asp:Image》没有onmousemove等事件
- 正则表达式问题,匹配所有的script的src属性换行符配不了
- !!!!!!!!!! 怎样将Text文件导出为XML文件呢,
- 模板列里控件调用JS
- 关于Form验证:一台机器上多个用户登陆的问题
例子51ASPX有
看几眼PETSHOP就会了。
或者随便找个代码生成器生成一个就明白了。
我感觉平时非大的项目或者后期会更新的没有必要使用三层的结构
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!!
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!!
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数及界面设置!!
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!!
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!!
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数,接受从中间层返回的数据,以及界面设置!!
http://www.cnblogs.com/82767136/articles/1213620.html
然后去网上找这篇文章<<浅谈三层结构原理与用意>>看看
把里面的代码敲一遍就知道啥是三层了
可以看一下这帖子,讨论的很热,不过里边有些误人子弟的方法.重要的还是要自己去理解
不大懂阿
不过我感觉用了三层后 层次更清晰 也方便 不用每个页面都要Open Close
呵呵
--> 数据层: --> 逻辑层:新建类:Test.cs(放于App_Code文件夹下,新建方法 public DataSet myDS(){ DataSet ds = new DataSet(); return ds;}) --> 用户层:Default.aspx.cs : Test myTestCS = new Test();DataSet ds = myTestCS.myDS();
自己试着写一次,然后再去看关于三层的理论,这样会更深刻。
这是以前在做03项目时整理里的,可对你有帮助
一.一层.conn.cmd (this.label=....),显示.
二.发现如果要商品表,又要重复 conn,cmd,得到数据。所以
把重复的集中起来.分二层.
第一层:class dal
{
string conn;
dateset get()
{
cmd.......
}
}
第二层:this.label=get(得到用户);
this.label=get(得到商品);三,后来方法越来越多 ,得到用户基本信息,得到用户名字,得到用户...get1(),get2,get3,get4().....
发现方法里面都用了一些基本的数据操作.cmd.ExecuteNonQuery()等。....
又把他们集合起来. class dal
{
string conn;
dateset get()
{
cmd.......
}
} 变成
class dal
{
dateset get1()
{
dbhelper.get1();
}
}
class dbhelper
{
string conn;
}
这里还是二层.只是加了一个数据帮助类 dbhelper.
四,得到用户信息后 .this.label1=rs["name"]. this.label2=rs["id"].....
可以很好操作。
添加信息方法:name=this.lable1.text;
id=this.lable2.text; set name=name,id=id. 可是可以.但是我们用集中的思想.如果表的信息都在集中在一起那该多好.
class user
{
string name;
int id;
}我们就可以
user=getone();
.this.label1=user.name; this.label2=user.id.tosring();......
到现在我们有了user(model),dbhelper(帮助类) dal(数据访问类)五,程序老变.
得到用户信息.后来老板说,不是所有人都可以得会员信息.除了我。
ok .到dal层中加一个修改 get1()只给老板用. 副总又跑过来。老板说我也可以用.又某某某跑过来。...
刚催 get1();给所有人用.
再加一个 check()
check()
{
...
get1()
....
}
到这里来判断. (重载一样)
要求越来越多.dal.越来越杂.
但是你又发现。里面还是有写没有变.而且变的部分.都用到了那些没有变化的方法.
老思想.把不变的集中起来。变的出去。 class bll
{
privite static readonly dal=new .....();
check()
{
.....
dal.get1()
....
}
}
到现在我们有了user(model),dbhelper(帮助类) dal(数据访问类) bll(逻辑层)
六,后来又发现getone(),变来变去.今天是sql代码,明天是存储过程. 或者数据库要更换.
抽象出来.
interface iget(); sqldal:iget
prodal:iget 用反射来实现工厂.
....不写了。反正就是这个意思了。如果变化不大.就这样分层就可以了。
工厂层.接口层.就不需要了。
数据访问 类dao 方法select insert update delete
业务逻辑 类business 处理逻辑,调用dao的方法取数据,然后处理
表示层 web画面,调用business类的方法,得到按逻辑处理过的数据,显示在画面上
返回的可以是model(数据实体类),也可以是datatble,dataset数据集合等啊 这个根据需要