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 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章