ASP.NET三层结构演化构建之四——你不是我,我不是他

实体类是现实实体在计算机中的表示。比如一个人就是一个实体。当然,你也可以认为一扒屎是一个实体。我没意见的。

它贯穿于整个架构,负担着在各层次及模块间传递数据的职责。大多情况下,实体类和数据库中的表(这里指实体表,不包括表示多对多对应的关系表)是一一对应的,但这并不是一个限制

比如我们的数据库中有个表User。我们就可以在项目中创建User的实体类,这个类的一个实例化对象就表示一个User

上一篇博文提到的各层返回值的规范问题,就可以利用返回一个实体(或者实体的泛型集合)来实现。如果返回的实体有问题,就会在编译的时候给出错误提示。

实体类存放在Model或者Entity层中,那俩单词都表示实体。这里我们使用Model

 

新建一个项目,命名为Model,并新建一个类,类名为UserInfo.cs

 

这里我们再复习一下表User的字段。

 

 

将这些字段全部作为UserInfo实体类的属性。

 

UserInfo的内容如下:

 

using System;

 

namespace Model

{

    /// <summary>

    /// 表示用户信息的实体类

    /// </summary>

    public class UserInfo

    {

        private int userId;

        private string password;

        private bool isAdmin;

        private string userName;

        private bool sex;

        private Int16 age;

 

        /// <summary>

        /// 默认的构造函数

        /// </summary>

        public UserInfo() { }

 

        /// <summary>

        /// 带参的构造函数

        /// </summary>

        /// <param name="userId">用户Id</param>

        /// <param name="password">用户密码</param>

        /// <param name="isAdmin">是否为管理员</param>

        /// <param name="userName">用户名</param>

        /// <param name="sex">用户性别</param>

        /// <param name="age">用户年龄</param>

        public UserInfo(int userId, string password, bool isAdmin, string userName, bool sex, Int16 age)

        {

            this.userId = userId;

            this.password = password;

            this.isAdmin = isAdmin;

            this.userName = userName;

            this.sex = sex;

            this.age = age;

        }

 

        public int UserId

        {

            get { return userId; }

            set { userId = value; }

        }

        public string Password

        {

            get { return password; }

            set { password = value; }

        }

 

        public bool IsAdmin

        {

            get { return isAdmin; }

            set { isAdmin = value; }

        }

        public string UserName

        {

            get { return userName; }

            set { userName = value; }

        }

        public bool Sex

        {

            get { return sex; }

            set { sex = value; }

        }

        public Int16 Age

        {

            get { return age; }

            set { age = value; }

        }

    }

}

 

DAL中的User.cs:

 

using System.Data;

using System.Data.SqlClient;

using DBUtility;

using Model;

 

namespace DAL

{

    public class User

    {

        private const string SQL_SELECT_USERINFO_BY_USERID = "SELECT * FROM [User] WHERE UserId = @UserId";

        private const string PARM_USERID = "@UserId";

 

        /// <summary>

        /// 根据用户Id获取用户信息

        /// </summary>

        /// <param name="userId">用户Id</param>

        /// <returns>用户信息</returns>

        public UserInfo GetUserInfo(string userId)

        {

            UserInfo user = null;

            SqlParameter parm = new SqlParameter(PARM_USERID, SqlDbType.VarChar, 10);//参数UserId

            parm.Value = userId;//给参数赋值

            using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_USERINFO_BY_USERID, parm))

            {

                if (rdr.Read())

                {

                    user = new UserInfo(rdr.GetInt32(0), rdr.GetString(1), rdr.GetBoolean(2), rdr.GetString(3), rdr.GetBoolean(4), rdr.GetInt16(5));

                }

                else user = new UserInfo();

            }

            return user;

        }

    }

}

 

 

BLL中的User.cs:

 

namespace BLL

{

    public class User

    {

        DAL.User user = new DAL.User();

 

        /// <summary>

        /// 根据用户Id获取用户密码

        /// </summary>

        /// <param name="userId">用户Id</param>

        /// <returns>用户密码</returns>

        public string GetUserPassword(string userId)

        {

            return user.GetUserInfo(userId).Password;

        }

 

        /// <summary>

        /// 根据用户Id获取用户姓名

        /// </summary>

        /// <param name="userId">用户Id</param>

        /// <returns>用户姓名</returns>

        public string GetUserName(string userId)

        {

            return user.GetUserInfo(userId).UserName;

        }

    }

}

 

可见,DAL中的User.cs只剩下一个方法。返回值是UserInfo类型的。这样就保证了层与层之间数据的传输规范。

 

到目前为止,三层结构基本上是建好了。还有什么欠缺的么。如果有一天,Boss觉得SQL Server不爽,想用Oracle或者是MySQL或者是Access的时候怎么办呢。更换数据库可不是小事哟,会叫人精尽而亡的。

 

有没有办法对这种情况进行预防呢。

 

具体怎么做请看下一篇博文:ASP.NET三层结构演化构建之五——啥都能用。

 

项目示例下载:http://download.csdn.net/source/2946951 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值