求三层的秘密

时间:2022-08-23 00:59:30

学习asp.net也差不多快有一年了吧,但是对三层架构一点也不明白,一直迷迷糊糊,不知如何下手,因为不明白,做东西也从来都不用的,
一直想把三层弄明白了,各位哥哥姐姐,你们当时是怎么学会的啊?能否支两招,(推荐一些比较好的材料,如果有简单适应的小例子就更好了)
让我这个基本什么都不会的能看明白了,将不胜感激!!谢谢了先,分数不多了,有分必加

48 个解决方案

#1


多动手做些,比什么都好!
例子51ASPX有

#2


其实小项目根本用不到三层,顶多就用到两次,对此我感觉不用去刻意追求三层的概念跟理论,等做了大项目自然而然就知道了,项目太小用三层效率肯定会降低的

#3


因为你没用它,所以你不会。
看几眼PETSHOP就会了。
或者随便找个代码生成器生成一个就明白了。

#4


要学习三层,我个人推荐你去下载微软官方的petshop 4.0项目,有源代码,是个不错的学习项目

#5


没多大意义,多注意处理逻辑业务...data没必要太多关注了...好的生成工具太多了

#6


层这个概念本身就是一个幌子

#7


petshop 或者去 http://www.51aspx.com下载一个三层的。研究一下就知道了。

#8


说白了就是 把你的代码 分门别类的放到程序集头去 要用旧相互调用  提高代码重用性和可维护性

#9


动软代码生成器,就可以自动帮你生成一个三层架构的代码。

#10


我做ASP。NET也一年多了(主要做电子商务网站),跟楼主有一样的困惑,偶然去了解过,没搞明白,不过我不管这些东西,能把项目做出来就OK。

#11


三层没有秘密...你不能理解是因为不理解工程学,去学学软件工程...

#12


引用 7 楼 jiang_jiajia10 的回复:
petshop 或者去http://www.51aspx.com下载一个三层的。研究一下就知道了。

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();

就是这么简单。

#14


说白了:
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!!
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!!
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数及界面设置!!

#15


补充14楼说白了: 
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!! 
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!! 
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数,接受从中间层返回的数据,以及界面设置!!

#16


引用 13 楼 crackpot2007 的回复:
--> 数据层:

--> 逻辑层:新建类:Test.cs(放于App_Code文件夹下,新建方法 public DataSet myDS(){ DataSet ds = new DataSet(); return ds;})

--> 用户层:Default.aspx.cs : Test myTestCS = new Test();DataSet ds = myTestCS.myDS();

就是这么简单。


简单明了,说到点子上了。

#17


下载petshop自己玩玩吧.

#18


引用 14 楼 koukoujiayi 的回复:
说白了: 
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!! 
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!! 
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数及界面设置!!

我暂时也只知道这一点

#19


引用 18 楼 wybxs2006 的回复:
引用 14 楼 koukoujiayi 的回复:
说白了: 
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!! 
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!! 
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数及界面设置!! 
 
我暂时也只知道这一点

我现在也只知道这个!

#20


190079621 我的QQ    给你发个3层

#21


谢谢,谢谢大家了,牛年好运啊,呵呵

#22



多调用  多重构
少复制  少粘贴

我就一直这么改

#23


三层架构就是设置模式问题,下载petshop 等开源三层看看,多实践就明白了。
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
可以看一下这帖子,讨论的很热,不过里边有些误人子弟的方法.

重要的还是要自己去理解

#31


引用 30 楼 lovehongyun 的回复:
新手的话.不推荐看petshop,那个难度有点高. 

如果你就只是要资料,想要得到概念性的东西.随便网上搜一搜会有很多,可以看看 

http://topic.csdn.net/u/20090106/16/8ee503a4-179c-4f1c-8d39-9dae59cbf5ee.html 
可以看一下这帖子,讨论的很热,不过里边有些误人子弟的方法. 

重要的还是要自己去理解


我字打错了.是误人子弟的言论

#32


分三层管理代码,能更方便查错和修改代码~

#33


一层,再一层,再一层
这就三层了哈哈

#34


三层就是三楼的意思。别人问:你住几层啊?你说:我住三层。

#35


老实讲什么是三层我也搞不懂,或许因为我没用过或说没需要用过。为什么现在很多人开口闭口就是三层呢?是为三层开发而三层还是因需要三层而三层??

#36


学习

#37


我也是菜鸟
不大懂阿
不过我感觉用了三层后 层次更清晰 也方便 不用每个页面都要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(); 

#41


1、2、3、单独到文件夹 呵呵

#42


Up!

#43


个人建议:到 http://www.maticsoft.com/把三层例子下载下来,有两种,一个是简单三层;一个是工厂模式。
自己试着写一次,然后再去看关于三层的理论,这样会更深刻。

#44


http://www.cnblogs.com/conquer/archive/2006/11/18/564715.html
这是以前在做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

  用反射来实现工厂.
  ....不写了。反正就是这个意思了。如果变化不大.就这样分层就可以了。
 工厂层.接口层.就不需要了。


        

#47


方法就是.你去变.变了之后。你又要方便修改.因为你可能很懒.
变着变着,就是一个比较麻烦,但很方便修改,扩充的模式.模式简化后就是三层.

#48


三层的是 
数据访问 类dao 方法select insert update delete 
业务逻辑 类business 处理逻辑,调用dao的方法取数据,然后处理 
表示层  web画面,调用business类的方法,得到按逻辑处理过的数据,显示在画面上 


返回的可以是model(数据实体类),也可以是datatble,dataset数据集合等啊 

这个根据需要

#1


多动手做些,比什么都好!
例子51ASPX有

#2


其实小项目根本用不到三层,顶多就用到两次,对此我感觉不用去刻意追求三层的概念跟理论,等做了大项目自然而然就知道了,项目太小用三层效率肯定会降低的

#3


因为你没用它,所以你不会。
看几眼PETSHOP就会了。
或者随便找个代码生成器生成一个就明白了。

#4


要学习三层,我个人推荐你去下载微软官方的petshop 4.0项目,有源代码,是个不错的学习项目

#5


没多大意义,多注意处理逻辑业务...data没必要太多关注了...好的生成工具太多了

#6


层这个概念本身就是一个幌子

#7


petshop 或者去 http://www.51aspx.com下载一个三层的。研究一下就知道了。

#8


说白了就是 把你的代码 分门别类的放到程序集头去 要用旧相互调用  提高代码重用性和可维护性

#9


动软代码生成器,就可以自动帮你生成一个三层架构的代码。

#10


我做ASP。NET也一年多了(主要做电子商务网站),跟楼主有一样的困惑,偶然去了解过,没搞明白,不过我不管这些东西,能把项目做出来就OK。

#11


三层没有秘密...你不能理解是因为不理解工程学,去学学软件工程...

#12


引用 7 楼 jiang_jiajia10 的回复:
petshop 或者去http://www.51aspx.com下载一个三层的。研究一下就知道了。

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();

就是这么简单。

#14


说白了:
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!!
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!!
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数及界面设置!!

#15


补充14楼说白了: 
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!! 
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!! 
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数,接受从中间层返回的数据,以及界面设置!!

#16


引用 13 楼 crackpot2007 的回复:
--> 数据层:

--> 逻辑层:新建类:Test.cs(放于App_Code文件夹下,新建方法 public DataSet myDS(){ DataSet ds = new DataSet(); return ds;})

--> 用户层:Default.aspx.cs : Test myTestCS = new Test();DataSet ds = myTestCS.myDS();

就是这么简单。


简单明了,说到点子上了。

#17


下载petshop自己玩玩吧.

#18


引用 14 楼 koukoujiayi 的回复:
说白了: 
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!! 
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!! 
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数及界面设置!!

我暂时也只知道这一点

#19


引用 18 楼 wybxs2006 的回复:
引用 14 楼 koukoujiayi 的回复:
说白了: 
1.(数据访问层)把有关访问数据库的Select,insert,update,delete等放到一个或多个类里,也就是所谓底层!! 
2.(业务逻辑层)把你的相关的编码(有关逻辑)放到另一个或多个类里,也就是所谓中间层!! 
3.(表现层)就是你的页面,这里的工作主要是向中间层传递参数及界面设置!! 
 
我暂时也只知道这一点

我现在也只知道这个!

#20


190079621 我的QQ    给你发个3层

#21


谢谢,谢谢大家了,牛年好运啊,呵呵

#22



多调用  多重构
少复制  少粘贴

我就一直这么改

#23


三层架构就是设置模式问题,下载petshop 等开源三层看看,多实践就明白了。
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
可以看一下这帖子,讨论的很热,不过里边有些误人子弟的方法.

重要的还是要自己去理解

#31


引用 30 楼 lovehongyun 的回复:
新手的话.不推荐看petshop,那个难度有点高. 

如果你就只是要资料,想要得到概念性的东西.随便网上搜一搜会有很多,可以看看 

http://topic.csdn.net/u/20090106/16/8ee503a4-179c-4f1c-8d39-9dae59cbf5ee.html 
可以看一下这帖子,讨论的很热,不过里边有些误人子弟的方法. 

重要的还是要自己去理解


我字打错了.是误人子弟的言论

#32


分三层管理代码,能更方便查错和修改代码~

#33


一层,再一层,再一层
这就三层了哈哈

#34


三层就是三楼的意思。别人问:你住几层啊?你说:我住三层。

#35


老实讲什么是三层我也搞不懂,或许因为我没用过或说没需要用过。为什么现在很多人开口闭口就是三层呢?是为三层开发而三层还是因需要三层而三层??

#36


学习

#37


我也是菜鸟
不大懂阿
不过我感觉用了三层后 层次更清晰 也方便 不用每个页面都要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(); 

#41


1、2、3、单独到文件夹 呵呵

#42


Up!

#43


个人建议:到 http://www.maticsoft.com/把三层例子下载下来,有两种,一个是简单三层;一个是工厂模式。
自己试着写一次,然后再去看关于三层的理论,这样会更深刻。

#44


http://www.cnblogs.com/conquer/archive/2006/11/18/564715.html
这是以前在做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

  用反射来实现工厂.
  ....不写了。反正就是这个意思了。如果变化不大.就这样分层就可以了。
 工厂层.接口层.就不需要了。


        

#47


方法就是.你去变.变了之后。你又要方便修改.因为你可能很懒.
变着变着,就是一个比较麻烦,但很方便修改,扩充的模式.模式简化后就是三层.

#48


三层的是 
数据访问 类dao 方法select insert update delete 
业务逻辑 类business 处理逻辑,调用dao的方法取数据,然后处理 
表示层  web画面,调用business类的方法,得到按逻辑处理过的数据,显示在画面上 


返回的可以是model(数据实体类),也可以是datatble,dataset数据集合等啊 

这个根据需要