1. 程式人生 > >董可 廊坊師範學院資訊科技提高班十四期

董可 廊坊師範學院資訊科技提高班十四期

三層介紹

三層架構將資料層、應用層和業務層分離,業務層通過應用層訪問資料庫,保護資料安全,利於負載平衡,提高執行效率,方便構建不同網路環境下的分散式應用。 在這裡插入圖片描述

表現層(UI)

展現給使用者的介面,即使用者在使用一個系統的時候他的所見所得。依據應用規模的不同,所承受的負荷會有較大的差異,另外客戶端的數目,應用的複雜程度都會對其造成一定的影響。

namespace LoginUI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            string userName=txtUserName .Text.Trim ();
            string password = txtPassWord.Text;
            Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
            Login.Model .UserInfo user=mgr.UserLogin(userName, password );

            MessageBox.Show("登陸使用者:" + user.UserName);
        }
    }
}

業務邏輯層(BLL)

對資料層的操作和業務的處理。接收使用者的指令或者資料輸入,提交給應用層做處理,同時負責將業務邏輯層的處理結果顯示給使用者。相比傳統的應用方式,業務層對硬體的資源要求較低。

namespace Login.BLL
{
    public class LoginManager
    {
        public  Login.Model.UserInfo UserLogin(string userName, string password)
        {
            
            Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();
            Login.Model.UserInfo user=uDao.SelectUser(userName,password);

            if (user != null)//如果登陸成功,則新增積分
            {
                Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();
                sDao.UpdateScore(userName , 10);
                return user;
            }
            else
            {
                throw new Exception("登入失敗!");
            }
        }
    }
}

資料層(DAL)

直接操縱資料庫,主要是增刪改查的功能。儲存資料的資料庫伺服器和處理資料和快取資料的元件。元件將大量使用的資料放入系統的快取庫,以提高資料訪問和處理的效率。 業務邏輯層是整個三層的核心內容,分層的原理就是在客戶端和資料庫之間加一個“中間層”,對資料的訪問起到一個承上啟下的作用。兩者的訪問都是通過中間層進行的,不能直接聯絡。 UserDAO

namespace Login.DAL
{
    public class UserDAO
    {
        public Login.Model.UserInfo  SelectUser(string userName, string password)
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = @"SELECT ID, UserName, Password, Email From USERS 
                                    WHERE 
[email protected]
AND [email protected] "; cmd.CommandType = CommandType.Text; cmd.Parameters.Add(new SqlParameter("@UserName", userName)); cmd.Parameters.Add(new SqlParameter("@Password", password)); conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); Login.Model.UserInfo user = null; while (reader.Read()) { if (user == null) { user = new Login.Model.UserInfo(); } user.ID = reader.GetInt32(0); user.UserName = reader.GetString(1); user.Password = reader.GetString(2);//密碼不要從資料庫中往外取 if (!reader.IsDBNull (3)) { user.Email = reader.GetString(3); } } return user; } } } }

ScoreDAO

namespace Login.DAL
{
    public class ScoreDAO
    {
        public void UpdateScore(string userName, int value)
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = @"INSERT INTO SCORES(UserName, Score) Values(@UserName, @Score)";
                cmd.Parameters.Add(new SqlParameter("@UserName",userName ));
                cmd.Parameters.Add(new SqlParameter("@Score",value));
                conn.Open();
                cmd.ExecuteNonQuery();
            }
        }
    }
}

DbUtil

namespace Login.DAL
{
    public class DbUtil
    {
        public static string ConnString = @"Server = 冰瞳\SQLEXPRESS ; Database = Login ; User ID = sa; Password = 123456";
    }
}