学习asp.net也差不多快有一年了吧,但是对三层架构一点也不明白,一直迷迷糊糊,不知如何下手,因为不明白,做东西也从来都不用的,
一直想把三层弄明白了,各位哥哥姐姐,你们当时是怎么学会的啊?能否支两招,(推荐一些比较好的材料,如果有简单适应的小例子就更好了)
让我这个基本什么都不会的能看明白了,将不胜感激!!谢谢了先,分数不多了,有分必加
48 个解决方案
#1
多动手做些,比什么都好!
例子51ASPX有
例子51ASPX有
#2
其实小项目根本用不到三层,顶多就用到两次,对此我感觉不用去刻意追求三层的概念跟理论,等做了大项目自然而然就知道了,项目太小用三层效率肯定会降低的
#3
因为你没用它,所以你不会。
看几眼PETSHOP就会了。
或者随便找个代码生成器生成一个就明白了。
看几眼PETSHOP就会了。
或者随便找个代码生成器生成一个就明白了。
#4
要学习三层,我个人推荐你去下载微软官方的petshop 4.0项目,有源代码,是个不错的学习项目
#5
没多大意义,多注意处理逻辑业务...data没必要太多关注了...好的生成工具太多了
#6
层这个概念本身就是一个幌子
#8
说白了就是 把你的代码 分门别类的放到程序集头去 要用旧相互调用 提高代码重用性和可维护性
#9
动软代码生成器,就可以自动帮你生成一个三层架构的代码。
#10
我做ASP。NET也一年多了(主要做电子商务网站),跟楼主有一样的困惑,偶然去了解过,没搞明白,不过我不管这些东西,能把项目做出来就OK。
#11
三层没有秘密...你不能理解是因为不理解工程学,去学学软件工程...
#12
petshop 估计你看了就更晕了,可以下些小的看是怎么做的!
我感觉平时非大的项目或者后期会更新的没有必要使用三层的结构
#13
--> 数据层:
--> 逻辑层:新建类:Test.cs(放于App_Code文件夹下,新建方法 public DataSet myDS(){ DataSet ds = new DataSet(); return ds;})
--> 用户层:Default.aspx.cs : Test myTestCS = new Test();DataSet ds = myTestCS.myDS();
就是这么简单。
--> 逻辑层:新建类:Test.cs(放于App_Code文件夹下,新建方法 public DataSet myDS(){ DataSet ds = new DataSet(); return ds;})
--> 用户层:Default.aspx.cs : Test myTestCS = new Test();DataSet ds = myTestCS.myDS();
就是这么简单。
#14
说白了:
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!!
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!!
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数及界面设置!!
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!!
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!!
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数及界面设置!!
#15
补充14楼说白了:
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!!
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!!
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数,接受从中间层返回的数据,以及界面设置!!
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!!
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!!
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数,接受从中间层返回的数据,以及界面设置!!
#16
简单明了,说到点子上了。
#17
下载petshop自己玩玩吧.
#18
我暂时也只知道这一点
#19
我现在也只知道这个!
#20
190079621 我的QQ 给你发个3层
#21
谢谢,谢谢大家了,牛年好运啊,呵呵
#22
多调用 多重构
少复制 少粘贴
我就一直这么改
#24
代码要一行一行的写!
#25
建议楼主学习software engineering 相关知识
#26
学习三层你先得先看看设计模式中工厂模式和.net中的反射机制
然后去网上找这篇文章<<浅谈三层结构原理与用意>>看看
把里面的代码敲一遍就知道啥是三层了
然后去网上找这篇文章<<浅谈三层结构原理与用意>>看看
把里面的代码敲一遍就知道啥是三层了
#27
同意。看ms的petshop
#28
我其实主要是想要些资料,呵呵
#29
自己做.这东西不自己做,不自己是体会是明白不了其中的优劣的.
只能靠实践.
用久了.道理自然就全明白了.
只能靠实践.
用久了.道理自然就全明白了.
#30
新手的话.不推荐看petshop,那个难度有点高.
如果你就只是要资料,想要得到概念性的东西.随便网上搜一搜会有很多,可以看看
http://topic.csdn.net/u/20090106/16/8ee503a4-179c-4f1c-8d39-9dae59cbf5ee.html
可以看一下这帖子,讨论的很热,不过里边有些误人子弟的方法.
重要的还是要自己去理解
如果你就只是要资料,想要得到概念性的东西.随便网上搜一搜会有很多,可以看看
http://topic.csdn.net/u/20090106/16/8ee503a4-179c-4f1c-8d39-9dae59cbf5ee.html
可以看一下这帖子,讨论的很热,不过里边有些误人子弟的方法.
重要的还是要自己去理解
#31
我字打错了.是误人子弟的言论
#32
分三层管理代码,能更方便查错和修改代码~
#33
一层,再一层,再一层
这就三层了哈哈
这就三层了哈哈
#34
三层就是三楼的意思。别人问:你住几层啊?你说:我住三层。
#35
老实讲什么是三层我也搞不懂,或许因为我没用过或说没需要用过。为什么现在很多人开口闭口就是三层呢?是为三层开发而三层还是因需要三层而三层??
#36
学习
#37
我也是菜鸟
不大懂阿
不过我感觉用了三层后 层次更清晰 也方便 不用每个页面都要Open Close
呵呵
不大懂阿
不过我感觉用了三层后 层次更清晰 也方便 不用每个页面都要Open Close
呵呵
#38
谢谢谢谢诶各位了,那我就要多多实践了,嘿嘿
#39
实践出真理
#40
呵呵,,我也搞不懂,,不过我一直都是这样做站的:
--> 数据层:
--> 逻辑层:新建类:Test.cs(放于App_Code文件夹下,新建方法 public DataSet myDS(){ DataSet ds = new DataSet(); return ds;})
--> 用户层:Default.aspx.cs : Test myTestCS = new Test();DataSet ds = myTestCS.myDS();
--> 数据层:
--> 逻辑层:新建类:Test.cs(放于App_Code文件夹下,新建方法 public DataSet myDS(){ DataSet ds = new DataSet(); return ds;})
--> 用户层:Default.aspx.cs : Test myTestCS = new Test();DataSet ds = myTestCS.myDS();
#41
1、2、3、单独到文件夹 呵呵
#42
Up!
#44
http://www.cnblogs.com/conquer/archive/2006/11/18/564715.html
这是以前在做03项目时整理里的,可对你有帮助
这是以前在做03项目时整理里的,可对你有帮助
#45
觉得不用在意这个。做到就知道了!
#46
写一个演变过程给你。
得到用户信息表格
一.一层.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
用反射来实现工厂.
....不写了。反正就是这个意思了。如果变化不大.就这样分层就可以了。
工厂层.接口层.就不需要了。
得到用户信息表格
一.一层.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
用反射来实现工厂.
....不写了。反正就是这个意思了。如果变化不大.就这样分层就可以了。
工厂层.接口层.就不需要了。
#47
方法就是.你去变.变了之后。你又要方便修改.因为你可能很懒.
变着变着,就是一个比较麻烦,但很方便修改,扩充的模式.模式简化后就是三层.
变着变着,就是一个比较麻烦,但很方便修改,扩充的模式.模式简化后就是三层.
#48
三层的是
数据访问 类dao 方法select insert update delete
业务逻辑 类business 处理逻辑,调用dao的方法取数据,然后处理
表示层 web画面,调用business类的方法,得到按逻辑处理过的数据,显示在画面上
返回的可以是model(数据实体类),也可以是datatble,dataset数据集合等啊
这个根据需要
数据访问 类dao 方法select insert update delete
业务逻辑 类business 处理逻辑,调用dao的方法取数据,然后处理
表示层 web画面,调用business类的方法,得到按逻辑处理过的数据,显示在画面上
返回的可以是model(数据实体类),也可以是datatble,dataset数据集合等啊
这个根据需要
#1
多动手做些,比什么都好!
例子51ASPX有
例子51ASPX有
#2
其实小项目根本用不到三层,顶多就用到两次,对此我感觉不用去刻意追求三层的概念跟理论,等做了大项目自然而然就知道了,项目太小用三层效率肯定会降低的
#3
因为你没用它,所以你不会。
看几眼PETSHOP就会了。
或者随便找个代码生成器生成一个就明白了。
看几眼PETSHOP就会了。
或者随便找个代码生成器生成一个就明白了。
#4
要学习三层,我个人推荐你去下载微软官方的petshop 4.0项目,有源代码,是个不错的学习项目
#5
没多大意义,多注意处理逻辑业务...data没必要太多关注了...好的生成工具太多了
#6
层这个概念本身就是一个幌子
#7
petshop 或者去
http://www.51aspx.com下载一个三层的。研究一下就知道了。
#8
说白了就是 把你的代码 分门别类的放到程序集头去 要用旧相互调用 提高代码重用性和可维护性
#9
动软代码生成器,就可以自动帮你生成一个三层架构的代码。
#10
我做ASP。NET也一年多了(主要做电子商务网站),跟楼主有一样的困惑,偶然去了解过,没搞明白,不过我不管这些东西,能把项目做出来就OK。
#11
三层没有秘密...你不能理解是因为不理解工程学,去学学软件工程...
#12
petshop 估计你看了就更晕了,可以下些小的看是怎么做的!
我感觉平时非大的项目或者后期会更新的没有必要使用三层的结构
#13
--> 数据层:
--> 逻辑层:新建类:Test.cs(放于App_Code文件夹下,新建方法 public DataSet myDS(){ DataSet ds = new DataSet(); return ds;})
--> 用户层:Default.aspx.cs : Test myTestCS = new Test();DataSet ds = myTestCS.myDS();
就是这么简单。
--> 逻辑层:新建类:Test.cs(放于App_Code文件夹下,新建方法 public DataSet myDS(){ DataSet ds = new DataSet(); return ds;})
--> 用户层:Default.aspx.cs : Test myTestCS = new Test();DataSet ds = myTestCS.myDS();
就是这么简单。
#14
说白了:
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!!
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!!
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数及界面设置!!
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!!
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!!
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数及界面设置!!
#15
补充14楼说白了:
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!!
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!!
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数,接受从中间层返回的数据,以及界面设置!!
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!!
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!!
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数,接受从中间层返回的数据,以及界面设置!!
#16
简单明了,说到点子上了。
#17
下载petshop自己玩玩吧.
#18
我暂时也只知道这一点
#19
我现在也只知道这个!
#20
190079621 我的QQ 给你发个3层
#21
谢谢,谢谢大家了,牛年好运啊,呵呵
#22
多调用 多重构
少复制 少粘贴
我就一直这么改
#23
三层架构就是设置模式问题,下载petshop 等开源三层看看,多实践就明白了。
http://www.cnblogs.com/82767136/articles/1213620.html
http://www.cnblogs.com/82767136/articles/1213620.html
#24
代码要一行一行的写!
#25
建议楼主学习software engineering 相关知识
#26
学习三层你先得先看看设计模式中工厂模式和.net中的反射机制
然后去网上找这篇文章<<浅谈三层结构原理与用意>>看看
把里面的代码敲一遍就知道啥是三层了
然后去网上找这篇文章<<浅谈三层结构原理与用意>>看看
把里面的代码敲一遍就知道啥是三层了
#27
同意。看ms的petshop
#28
我其实主要是想要些资料,呵呵
#29
自己做.这东西不自己做,不自己是体会是明白不了其中的优劣的.
只能靠实践.
用久了.道理自然就全明白了.
只能靠实践.
用久了.道理自然就全明白了.
#30
新手的话.不推荐看petshop,那个难度有点高.
如果你就只是要资料,想要得到概念性的东西.随便网上搜一搜会有很多,可以看看
http://topic.csdn.net/u/20090106/16/8ee503a4-179c-4f1c-8d39-9dae59cbf5ee.html
可以看一下这帖子,讨论的很热,不过里边有些误人子弟的方法.
重要的还是要自己去理解
如果你就只是要资料,想要得到概念性的东西.随便网上搜一搜会有很多,可以看看
http://topic.csdn.net/u/20090106/16/8ee503a4-179c-4f1c-8d39-9dae59cbf5ee.html
可以看一下这帖子,讨论的很热,不过里边有些误人子弟的方法.
重要的还是要自己去理解
#31
我字打错了.是误人子弟的言论
#32
分三层管理代码,能更方便查错和修改代码~
#33
一层,再一层,再一层
这就三层了哈哈
这就三层了哈哈
#34
三层就是三楼的意思。别人问:你住几层啊?你说:我住三层。
#35
老实讲什么是三层我也搞不懂,或许因为我没用过或说没需要用过。为什么现在很多人开口闭口就是三层呢?是为三层开发而三层还是因需要三层而三层??
#36
学习
#37
我也是菜鸟
不大懂阿
不过我感觉用了三层后 层次更清晰 也方便 不用每个页面都要Open Close
呵呵
不大懂阿
不过我感觉用了三层后 层次更清晰 也方便 不用每个页面都要Open Close
呵呵
#38
谢谢谢谢诶各位了,那我就要多多实践了,嘿嘿
#39
实践出真理
#40
呵呵,,我也搞不懂,,不过我一直都是这样做站的:
--> 数据层:
--> 逻辑层:新建类:Test.cs(放于App_Code文件夹下,新建方法 public DataSet myDS(){ DataSet ds = new DataSet(); return ds;})
--> 用户层:Default.aspx.cs : Test myTestCS = new Test();DataSet ds = myTestCS.myDS();
--> 数据层:
--> 逻辑层:新建类:Test.cs(放于App_Code文件夹下,新建方法 public DataSet myDS(){ DataSet ds = new DataSet(); return ds;})
--> 用户层:Default.aspx.cs : Test myTestCS = new Test();DataSet ds = myTestCS.myDS();
#41
1、2、3、单独到文件夹 呵呵
#42
Up!
#43
个人建议:到
http://www.maticsoft.com/把三层例子下载下来,有两种,一个是简单三层;一个是工厂模式。
自己试着写一次,然后再去看关于三层的理论,这样会更深刻。
自己试着写一次,然后再去看关于三层的理论,这样会更深刻。
#44
http://www.cnblogs.com/conquer/archive/2006/11/18/564715.html
这是以前在做03项目时整理里的,可对你有帮助
这是以前在做03项目时整理里的,可对你有帮助
#45
觉得不用在意这个。做到就知道了!
#46
写一个演变过程给你。
得到用户信息表格
一.一层.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
用反射来实现工厂.
....不写了。反正就是这个意思了。如果变化不大.就这样分层就可以了。
工厂层.接口层.就不需要了。
得到用户信息表格
一.一层.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
用反射来实现工厂.
....不写了。反正就是这个意思了。如果变化不大.就这样分层就可以了。
工厂层.接口层.就不需要了。
#47
方法就是.你去变.变了之后。你又要方便修改.因为你可能很懒.
变着变着,就是一个比较麻烦,但很方便修改,扩充的模式.模式简化后就是三层.
变着变着,就是一个比较麻烦,但很方便修改,扩充的模式.模式简化后就是三层.
#48
三层的是
数据访问 类dao 方法select insert update delete
业务逻辑 类business 处理逻辑,调用dao的方法取数据,然后处理
表示层 web画面,调用business类的方法,得到按逻辑处理过的数据,显示在画面上
返回的可以是model(数据实体类),也可以是datatble,dataset数据集合等啊
这个根据需要
数据访问 类dao 方法select insert update delete
业务逻辑 类business 处理逻辑,调用dao的方法取数据,然后处理
表示层 web画面,调用business类的方法,得到按逻辑处理过的数据,显示在画面上
返回的可以是model(数据实体类),也可以是datatble,dataset数据集合等啊
这个根据需要