首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 我理解的三层结构有没有错? [已结贴,结贴人:lingrain]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lingrain
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-06-09 02:30:55 楼主
    用ASP.NET的C#开发程序,我理解的三层机构是这样的:
    程序代码跟HTML分离,即ASPX页面不包含C#代码,这是两层结构;
    如果再把数据库操作相关的C#代码独立出来,这就成了三层结构。
    分三层的目的是为了方便协同开发,维护和扩展。
    130  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sunlovesea
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 08:01:571楼 得分:0
    不对.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sunlovesea
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 08:02:592楼 得分:20
    用ASP.NET的C#开发程序,我理解的三层机构是这样的:
    程序代码跟HTML分离,即ASPX页面不包含C#代码,这是两层结构;
    ---------------------------------------------------------------
    这只是代码分离


    如果再把数据库操作相关的C#代码独立出来,这就成了三层结构。
    分三层的目的是为了方便协同开发,维护和扩展。
    -----------------------------------------------------------
    这是两层结构
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhoufoxcn
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 08:03:533楼 得分:0
    分层就是为了开发和维护方便,这是主要宗旨。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jiningyin
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 08:18:324楼 得分:0
    你懂个屁!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • newKoala
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 08:18:425楼 得分:5
    我看一些书上介绍

    是把对数据库的各种操作都写成存储过程,然后调用这些存储过程

    这样是不是第三层?与直接在ASP.NET代码中直接操作数据库看相比,这样有什么好处?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dragonforfly
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 10:16:456楼 得分:5
    数据持久层,进行数据的持久保存,对任何软件来说除了数据结构不同,其他的都是相同的,如果使用完全面向对象的数据结构,那么这也是相同的
    商务逻辑层,封装项目的业务处理规则,不同的项目,业务逻辑是不同的
    用户界面层,用户交互接口,aspx页面只能是用户界面层的表面的表面
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • whb147
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 10:54:377楼 得分:0
    你去看看petshop就知道了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chenyaping987123
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 11:02:098楼 得分:0
    应该是用户界面层,业务逻辑层,数据层
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • abc83915
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 12:03:219楼 得分:0
    维护扩展和安全性
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lingrain
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 12:05:3010楼 得分:0
    我看到某讲师关于三层结构的例子是这样的,

    显示层: <HTML>
    <HEAD> </HEAD>
    <BODY>
      <asp:Repeater runat="server" ID="m_aspCommentListCtrl">
          ......
      </asp:Repeater>
    </BODY>
    </HTML>

    业务逻辑层:
    void Page_Load(object sender, EventArgs e)
            {
                DataSet newsDS = (new NewsTask()).GetNewsList();
                // 将新闻绑定到控件
            }


    数据访问层:
    public class NewsTask
        {
            public DataSet GetNewsList()
            {
                // SQL 语句
                ....
                return ds;
            }
        }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tiancaolin
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 12:07:5411楼 得分:0
    引用楼主 lingrain 的帖子:
    用ASP.NET的C#开发程序,我理解的三层机构是这样的:
    程序代码跟HTML分离,即ASPX页面不包含C#代码,这是两层结构;
    如果再把数据库操作相关的C#代码独立出来,这就成了三层结构。
    分三层的目的是为了方便协同开发,维护和扩展。

    这不是真正的三层思想
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • srym
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 12:19:0412楼 得分:30
    使用objectdatasource结合数据绑定控件进行简单三层架构的开发http://blog.csdn.net/srym/archive/2008/04/03/2246926.aspx
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liuhy365
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 12:49:2413楼 得分:5
    其实不要把三层架构给定死了,之所以用三层架构一个是为了开发时的方便,一个是为了维护时的方便,在DAL里,主要是对数据库的操作,将关于数据库的所有操作封装在一起,在BLL中调用这些操作,打个比方,比如我现在正在做登录模块,我需要向数据库验证用户名跟密码,有两种办法,我直接就写链接数据库的语句,然后操作数据库,验证信息是否合法,但如果我要是数据库的地址换了呢,我是不是得在程序中的每个用到连接字符串的地方去改掉,又或者如果我对查询语句进行了优化,是不是也得找到每一个相似的语句去更改,也许我可以把这个做成一个函数但这不是最好的办法,因为大家是一起开发的,如果都同时操作一个文件,结果可想而知,所以就干脆把所有有关数据库的操作一起放到DAL中,当有操作数据库的请求时,直接调用BLL中的一个实例的方法,比如bool CheckUser(string username,string password),每个人做自己的事,而不需要考虑这个方法是怎么实现的,还有一点就是,如果程序可用的数据库不止一种呢,SQL语句有的也得换吧,难道你在程序中一个一个的判断当前使用的是什么数据库SQLServer还是Oracle又或者MYSQL,一个比较好的做法是将这些关于数据库的操作分别封装到DAL中,即SQLServerDAL,OracleDAL,在此之前设计一个接口,而DAL是对这个接口的实现,这样在BLL中你就不用管到底数据库是用的那种了,你只管调用这个接口,接口的名称是一样的,但在不同的DAL中有不同的实现,最后通过查找配置文件反射来决定到底是用哪个数据库,我说这么多也不知道你理解没有,其实最好去看看代码,就是微软的PetShop4.0,设计的真的很不错,建议你去看看。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lya121
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 12:53:1914楼 得分:0
    引用 7 楼 whb147 的回复:
    你去看看petshop就知道了


    上帝、他连3层都这么模糊。
    你让他看21层,你不想让他活了。

    诶!微软的汰NB了。
    我现在做7层,其实7层已经恨实用了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lingrain
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 13:29:4515楼 得分:0
    刚看了下PETSHOP的编码风格,并不怎么好啊,比如大括号就没有对齐。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lya121
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 13:38:4516楼 得分:0
    引用 15 楼 lingrain 的回复:
    刚看了下PETSHOP的编码风格,并不怎么好啊,比如大括号就没有对齐。


    估计那个人以前是做JAVA的

    他用的JAVA的编码规范

    是不是这样嘛
    Java code
    public class Myclass{ int type; public Myclass(int type){ this.type = type; } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhulei2008
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 13:45:4417楼 得分:0
    Petshop
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • menu_748
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 13:51:5318楼 得分:0
    该回复于2008-06-10 08:53:47被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xmq120
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 17:37:5619楼 得分:0
    建议你去用 动软.Net代码自动生成器  这个生成下项目 看看 里面有个简单三层模式 我想能让你理解三层的概念
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happy_sky
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 17:54:3920楼 得分:5
    model //模式层,处理业务逻辑,调用控制组件
    view  //显示层,也就是UI界面
    control //控制层,处理具体的逻辑功能,连接数据库等操作
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tootto
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 18:03:1921楼 得分:10
    一个典型的三层结构:

    表示层:Login.aspx.cs
    逻辑层:Class BusinessLogic
    数据层: Class DBManager

    Login.aspx.cs:
    protected void OnLoginButtonClick(object sender, EventArgs e)
    {
        if ( BusinessLogic.LoginService( user ))
        {
          ...
        }
        else
        {
          ...
        }

    }
    ------------------------------------------------------------
    Class BusinessLogic
    {
      ....
      ....

      public static bool LoginService(object user)
      {
          return user==null ? false : DBManager.Login(user);
      }
      ....
    }

    ----------------------------------------------------
    Class DBManager
    {
      .......
      .......

      public static bool Login(object user)
      {
          DBconnectionStringXXXXXX;
          DBReaderXXXXX;
          bool isValidUser = false;
          try
          {
            connectionOpenXXXX..
            ....
            ....
          }
          catch
          {
            .....
          }
       
          return isValidUser;
      }
    }


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • DITE_feng
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 18:59:5222楼 得分:0
    model //模式层,处理业务逻辑,调用控制组件
    view  //显示层,也就是UI界面
    control //控制层,处理具体的逻辑功能,连接数据库等操作

    好像这个对吧!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tootto
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 19:02:5923楼 得分:0
    引用 22 楼 DITE_feng 的回复:
    model //模式层,处理业务逻辑,调用控制组件
    view  //显示层,也就是UI界面
    control //控制层,处理具体的逻辑功能,连接数据库等操作

    好像这个对吧!!!


    叫法无所谓,表达的意思是一样的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • flyond
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 21:13:0924楼 得分:0
    差不多啦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oxlshmily
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 22:13:0425楼 得分:0
    C# code
    真正的三层是表现层(简称UI层)、业务逻辑层(Business Logic Layer,简称BLL层)和数据访问数据访问层(Data Access Layer,简称DAL层)


    ...这是我认为的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • honghu3000
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 22:25:4226楼 得分:0
    petShop4 我一直没看懂...
    看不明白呀
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • love531000
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 22:30:1627楼 得分:0
    其实很多的分成都是这3成拓展出去的··
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aspnet30
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-10 00:33:3128楼 得分:0
    引用 10 楼 lingrain 的回复:
    我看到某讲师关于三层结构的例子是这样的,

    显示层: <HTML>
    <HEAD> </HEAD>
    <BODY>
      <asp:Repeater runat="server" ID="m_aspCommentListCtrl">
          ......
      </asp:Repeater>
    </BODY>
    </HTML>

    业务逻辑层:
    void Page_Load(object sender, EventArgs e)
            {
                DataSet newsDS = (new NewsTask()).GetNewsList();
                // 将新闻绑定到控件
            }


    数据访问…


    这是讲师???
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lya121
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-10 01:21:4229楼 得分:10
    引用 22 楼 DITE_feng 的回复:
    model //模式层,处理业务逻辑,调用控制组件
    view  //显示层,也就是UI界面
    control //控制层,处理具体的逻辑功能,连接数据库等操作

    好像这个对吧!!!


    这都是哪跟哪啊?

    看好了:
    1、表示层
    2、业务逻辑层
    3、数据访问层
        //上面三个是传统的三层架构
    4、实体层
        //上面四个传统的四层
    5、抽象工厂层
    6、抽象产品层
        //基本的6层(最近一直做6层,酒店管理系统)
    ……
    后头的我就不了解了。
    如果哪天哪个高手给PetShop的21层的名字研究透了,拿出来给大家看看。
    修改 删除 举报 引用 回复