A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

钟佰霖

中级黑马

  • 黑马币:5

  • 帖子:10

  • 精华:0

© 钟佰霖 中级黑马   /  2013-1-24 09:49  /  1707 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钟佰霖 于 2013-1-24 22:27 编辑

谁能给我讲解一下三层架构的原理!?最好能附带一下代码分析,谢谢了!

4 个回复

倒序浏览
1. 表现层(UI):表现层就是展现给用户的界面,即用户在使用一个系统的时候的所见所得;
2. 业务逻辑层(BLL): 针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑的处理;
3. 数据访问层(DAL): 该层所做事务直接操作数据库,针对数据的增添,删除,修改,更新,查找等,每层之间是一种垂直的关系。
4. 举例子:
第一步.右键解决方案,添加,新建项目,c#类库,命名为MODEL,对其下的类重命名:Model
           代码如下:
       /// <summary>
        /// 初始化登录名称、登录密码(Model类)
        /// </summary>
        private string adminUser =string.Empty; //设置用户名称为空值
        private string adminPwd =string.Empty; //设置用户密码为空值
        public string AdminUser
        {
            get
            {
                return this.adminUser;
            }
            set
            {
                this.adminUser = value;
            }
        }
        public string AdminPwd
        {
            get
            {
                return this.adminPwd;
            }
            set
            {
                this.adminPwd = value;
            }
        }

第二步:右键解决方案,添加,新建项目,C#类库,命名为BLL,对其下的类重命名:Bll
            代码如下:
            /// <summary>
         /// 用户登录(BLL类)
        /// </summary>
        /// <paramname="m"></param>
        ///<returns></returns>
        public static int sysLogin(Model m)
        {
            string str ="adminValid"; //存储过程名称
            SqlParameter[] sqlParameter =
                {
                    //将UI层传递过来的用户名称和密码赋值给存储过程中的变量分别是adminUser和adminPwd(注意大小写)
                    new SqlParameter("adminUser",m.AdminUser),
                    new SqlParameter("adminPwd",m.AdminPwd)
                };
            DAL d = new DAL();
            returnInt32.Parse(d.ExecuteScalar(str,sqlParameter));
        }

第三步:右键解决方案,添加,新建项目,C#类库,命名为DAL,对其下的类重命名:Dal数据库名要自己进行改动:
        代码如下:
                /// <summary>
        /// 新建一个SQL登录链接
        /// </summary>
        ///<returns></returns>
        private static SqlConnectioncon()
        {
            return newSqlConnection("Data Source=localhost;Initial Catalog=MYDB;Integrated Security=SSPI;");
        }
        /// <summary>
        /// 执行操作(DAL类)
        /// </summary>
        /// <paramname="str"></param>
        /// <paramname="sql"></param>
        ///<returns></returns>
        public stringExecuteScalar(string str, SqlParameter[] sql)
        {
            SqlConnection con =DAL.con();
            try
            {
                con.Open();
                SqlCommand com = newSqlCommand(str, con);
                com.CommandType =CommandType.StoredProcedure;
                com.Parameters.AddRange(sql);
                return Convert.ToString(com.ExecuteScalar()); //返回受影响的行数(例如影响的行数为1,那么返回数值1到BLL层,然后BLL层将数值1返回到UI层)
            }
            catch (Exception Error)
            {
                throw Error;
            }
            finally
            {
                con.Close();
            }
        }

第四步:右键解决方案,添加,新建网站,asp.net网站,命名为Login,页面中加入两个TextBox控件和一个Label 控件,还有一个Button,以下为Button的点击事件代码:
           代码如下:
       //UI层
        Model m = new Model(); //实例化Model类
        m.AdminUser =this.TextBox1.Text.ToString(); //将文本框1中的值传递给Model类中的AdminUser
        m.AdminPwd =this.TextBox2.Text.ToString(); //将文本框2中的值传递给Model类中的AdminPwd
        if (BLL.sysLogin(m) > 0)
        {
            this.Label1.Text = "登录成功!马上进入管理平台...";
        }
        else
        {
            this.Label1.Text = "用户或密码错误,请重新输入!";
        }
第五步:写后台数据库存储过程
--存储过程(按自己的数据库进行改动)
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROC [dbo].[adminValid]
@adminUser varchar(20),@adminPwd varchar(120)
AS
SELECT COUNT(*) FROM admin WHERE adminUser = @adminUser AND adminPwd =@adminPwd

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
值的学习。存储过程除了最后一句查询看的懂。其它都看不懂
回复 使用道具 举报
许庭洲 发表于 2013-1-24 10:03
1. 表现层(UI):表现层就是展现给用户的界面,即用户在使用一个系统的时候的所见所得;
2. 业务逻辑层(BLL): ...

谢了,分析得比较清晰,复制都记事本慢慢研究!!
回复 使用道具 举报
钟佰霖 发表于 2013-1-24 16:11
谢了,分析得比较清晰,复制都记事本慢慢研究!!

请把问题改为“已解决”
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马