asp.net三层结构

来源:互联网 发布:鞭长网络验证 编辑:程序博客网 时间:2024/05/10 03:42

新人并无实际工作经验

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

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


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为后缀的类库(注意别搞错了  是类库  新建那显示的只有类库两个字..别搞成项目了)
下面正文了...


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

引用顺序是:Model<DAL<BLL<UI
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    {        /// <summary>        /// 数据库连接配置文件        /// </summary>        public static readonly string strCon = ConfigurationManager.ConnectionStrings["MySchool"].ConnectionString;        ///public static readonly string strCon = "字符串";        /// <summary>        /// 打开数据库连接        /// </summary>        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);        }        /// <summary>        /// 增,删,改        /// </summary>        /// <param name="sql">查询语句</param>        /// <param name="comType">存储过程</param>        /// <param name="sps">参数</param>        /// <returns>受影响行数</returns>        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);        }        /// <summary>        /// 统计单行单列值        /// </summary>        /// <param name="sql">查询语句</param>        /// <param name="comType">存储过程</param>        /// <param name="sps">参数</param>        /// <returns>单行单列值</returns>        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);        }        /// <summary>        /// 读取数据集        /// </summary>        /// <param name="sql">查询语句</param>        /// <param name="comType">存储过程</param>        /// <param name="sps">参数</param>        /// <returns>数据表集合</returns>        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、 数据库表、字段)


文件不知道怎么上传...所以外链啦:三层结构实例
0 0
原创粉丝点击