asp.net三层结构

新人并无实际工作经验

博客记录自己成长与知识归类  方便自己 当然或许能方便他人

另外 ,一些不对的地方欢迎指教


1.三层结构

asp.net三层结构_第1张图片

1.1


如图所示,有四个类库
第一个与项目名相同的是UI层  说白了就是一些眼睛能看到的  比如网页一些表面看到的东西
第二个BLL逻辑层  一些可以复用的逻辑处理什么的  实际作用我也不太明白 没工作经验一些小Demo基本用不上
个人感觉是放一些经常用得到的方法 好像还有点安全性的意思
第三个DAL数据访问层  字面意思   连接数据库 操作数据库的方法的封装  方便调用  直接复用节省时间
第四个Model  模型层  和数据库里的表差不多
实际UI BLL DAL才是三层结构  Model这个可以忽略 但是却不得不重视他的存在 实际掌握了就知道为什么那么特殊了  VS2005好像没什么作用 一样麻烦  目前已知2010以上用着特别舒服~比如
 
  
Test tt = new Test()
{
//赋值操作 比如
testId=textbox1.text,
testPwd=textbox1.text
};
不过这里还会利用实体类进行一些数据传输   也可以根据需求加一些字段  一般实际项目都不怎么手写的  不过手写也有好处 很多东西都是无意看到然后写的时候想起来 之后受益终生  所以没什么事还是尽量手写吧


2.三层结构之间的调用方法

根据1.1图  类库的添加顺序是最先添加Model  首先建立一个asp.net项目  再分别添加Model  DAL  BLL为后缀的类库(注意别搞错了  是类库  新建那显示的只有类库两个字..别搞成项目了)
下面正文了...
asp.net三层结构_第2张图片

右键引用-添加引用   按照数字顺序操作  其他的都是这种方式

引用顺序是:Model
DAL引用Model
BLL引用DAL和Model
UI根据需要引用吧  一般来说是引用Model和BLL


2.1 DBHelper辅助类(个人习惯写法 新手建议使用微软通用的辅助类)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//手动导入
using System.Configuration;
using System.Data.SqlClient;
using System.Data;

namespace MyWebProjectDAL
{
    public static class DBHelper
    {
        /// 
        /// 数据库连接配置文件
        /// 
        public static readonly string strCon = ConfigurationManager.ConnectionStrings["MySchool"].ConnectionString;
        ///public static readonly string strCon = "字符串";
        /// 
        /// 打开数据库连接
        /// 
        public static SqlConnection Conn
        {
            get
            {
                SqlConnection conn = new SqlConnection(strCon);
                conn.Open();
                return conn;
            }
        }

        public static int GetExecuteNonQuery(string sql)
        {
            return GetExecuteNonQuery(sql,CommandType.Text,null);
        }
        public static int GetExecuteNonQuery(string sql, SqlParameter[] sps)
        {
            return GetExecuteNonQuery(sql,CommandType.Text, sps);
        }
        /// 
        /// 增,删,改
        /// 
        /// 查询语句
        /// 存储过程
        /// 参数
        /// 受影响行数
        public static int GetExecuteNonQuery(string sql, CommandType comType, SqlParameter[] sps)
        {
            using (SqlConnection conn = Conn)
            {
                SqlCommand comm = new SqlCommand(sql, conn);
                comm.CommandType = comType;
                if (sps != null)
                {
                    comm.Parameters.AddRange(sps);
                }
                return comm.ExecuteNonQuery();
            }
        }
        public static object GetExecuteScalar(string sql)
        {
            return GetExecuteScalar(sql,CommandType.Text,null);
        }
        public static object GetExecuteScalar(string sql, SqlParameter[] sps)
        {
            return GetExecuteScalar(sql,CommandType.Text,sps);
        }
        /// 
        /// 统计单行单列值
        /// 
        /// 查询语句
        /// 存储过程
        /// 参数
        /// 单行单列值
        public static object GetExecuteScalar(string sql, CommandType comType, SqlParameter[] sps)
        {
            using (SqlConnection conn = Conn)
            {
                SqlCommand comm = new SqlCommand(sql, conn);
                comm.CommandType = comType;
                if (sps != null)
                {
                    comm.Parameters.AddRange(sps);
                }
                return comm.ExecuteScalar();
            }
        }
        public static SqlDataReader GetExecuteReader(string sql)
        {
            return GetExecuteReader(sql,CommandType.Text,null);
        }
        public static SqlDataReader GetExecuteReader(string sql, SqlParameter[] sps)
        {
            return GetExecuteReader(sql, CommandType.Text, sps);
        }
        /// 
        /// 读取数据集
        /// 
        /// 查询语句
        /// 存储过程
        /// 参数
        /// 数据表集合
        public static SqlDataReader GetExecuteReader(string sql, CommandType comType, SqlParameter[] sps)
        {
            SqlConnection conn = Conn;
            try
            {
                SqlCommand comm = new SqlCommand(sql, conn);
                comm.CommandType = comType;
                if (sps != null)
                {
                    comm.Parameters.AddRange(sps);
                }
                return comm.ExecuteReader();
                //此属性用于自动关闭读取器,开启可能导致某些异常
                //return comm.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}


2.2 模型层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyWebProjectModel
{
    public class Grade
    {
        public string GradeId { get; set; }
        public string GradeName { get; set; }
    }
}
2.3 数据访问层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using MyWebProjectModel;

namespace MyWebProjectDAL
{
    public class GradeServices
    {
        public string GetGradeById(int Id)
        {
            string sql = "select GradeName from Grade where Gradeid=" + Id;
            return Convert.ToString(DBHelper.GetExecuteScalar(sql));
        }
    }
}
2.4 逻辑处理层
namespace MyWebProjectBLL
{
    public class GradeManager
    {
        GradeServices gs = new GradeServices();
        public string GetGradeById(int Id)
        {
            return gs.GetGradeById(Id);
        }
    }
}

UI层调用这里就不上代码了  全局实例化BLL里的类  然后实例名.方法名就出来了 根据对象数据源类型选择相应的方法


最后到这里  强烈建议新手在一般情况下不要使用中文!(我觉得应该是..项目名、类库名、类名、文件夹名、控件ID、 数据库表、字段)


文件不知道怎么上传...所以外链啦: 三层结构实例

你可能感兴趣的:(asp.net)