base de três camadas

Quais são as três

Três camadas arquitetura (arquitetura 3-tier) é o todo de negócios do aplicativo é dividido em:

  • camada de interface (User Interface Layer)

papel : mostrar para a aquisição de dados de tráfego específico do usuário e operação de entrada do usuário
[PS: princípios de design: cliente em primeiro lugar, tendo em conta a simplicidade]

  • A lógica de negócios (Business Logic Layer)

papel: principalmente responsável pela operação da camada de dados, dados de nivel que algumas operações combinadas.

  • Data Access Layer (Data Access Layer)

efeito: e lidar com fontes de dados, para Select, Insert / Update, operação de exclusão.

purpose três
  • Alta coesão, baixo acoplamento
Quando usar três

Quando usar três :
de certa forma, quando você precisa se concentrar negócio quando complexa quando seu programa armazenado em um banco de dados correspondente de armazenamento de dados em separado: o acesso aos dados do negócio, o negócio da UI. Neste caso: UI só precisa chamar a camada de acesso a serviço pode ser utilizado.

aplicações específicas de três
  1. camada D fornece apenas acesso básico de dados, não contém qualquer lógica de negócios relacionados.
  2. camada U só é responsável pela recolha e exibindo uma operação de usuário, não contém qualquer lógica de negócios relacionada com
  3. camada B é responsável pela lógica de serviço de processamento. UI através da obtenção de instrução da operação transmitida, decide realizar operações lógicas, quando necessário, para acessar diretamente o processo de fonte de dados camada D. Quando o processamento estiver completo, retornar os dados necessários para a camada L.
Três vantagens e desvantagens

vantagens:

★ desenvolvedores podem se concentrar em toda a estrutura em que uma camada
★ pode ser facilmente substituída por uma nova percepção da implementação nível original.
★ pode reduzir a dependência entre as camadas
★ favor de padronizado
★ favor de camadas de lógica multiplexagem
★ estrutura mais clara
★ quando pós-manutenção, reduzindo grandemente os custos de manutenção e espaço de manutenção

desvantagens:

☆ reduzir o desempenho do sistema. Ele é auto-evidente. Se você não usar uma estrutura hierárquica, muitas empresas podem visitar diretamente o banco de dados, a fim de obter os dados correspondentes, mas agora isso deve ser feito através de uma camada intermediária.
☆ vezes, levar a uma cascata de modificação. Esta modificação é reflectido na direcção de cima para baixo. Se você precisa adicionar uma função na camada de apresentação, como a sua hierarquia de design, você pode precisar de ter aumentado o código correspondente na camada de lógica de negócios e acesso a dados correspondente.
☆ aumentar os custos de desenvolvimento.

Referências entre três

Aqui Insert Picture Descrição

Três do código

L código de nível:

private void BTLogin_Click(object sender, EventArgs e)
{ 
    try
    //对try块代码进行异常捕捉,
    //如无异常则进行直try块结束,
    //如有异常则跳转进入catch块。
    {
        string userName = txtUserName.Text.Trim();
        string password = txtPassword.Text;
        Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
        //将用户输入的数据传给BLL,在下面一句的使用中,就直接从BLL调用数据
        Login.Model.UserInfo user = mgr.UserLogin(userName, password);
        //在这里就可以返回model里的userinfo
        MessageBox.Show("登陆用户:" + user.UserName);
    }
    catch (Exception ex)
    //处理异常。如下进行处理
    {
        MessageBox.Show(ex.Message);
    }
}

camada de código B

public class LoginManager
    {
        public Login.Model.UserInfo UserLogin(string userName,string password)
            //获取UI传来的指令UserLogin和数据Username还有password,可以返回model里的userinfo了
        { 
            
            Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();
            Login.Model.UserInfo user = uDao.SelectUser(userName, password);
            //调用userDao的selectUser方法,返回Model里的UserInfo

            if (user != null)//登录成功
            {
                Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();
                sDao.UpdateScore(userName, 10);
                //调用ScoreDAO里的UpdateScores增加积分的方法,选择用户名,增加十个积分
                return user;
            }
            else
            {
                throw new Exception("登陆失败。");
                //抛出异常
            }
        }
    }

Camada de código D

public class ScoreDAO
    {
        public void UpdateScore(string userName, int value)
            //写一个增加积分的方法,从B层获取数据
        {
            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();

            }
        }
    }

public class UserDAO
    {
        public Login.Model.UserInfo SelectUser(string userName, string password)
            //写一个方法,根据用户名和密码判断,返回一个数据模型,
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            //有了上面的这个using ,connection就可以自动关闭了,
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = @"SELECT ID,UserName,Password,Email
                                  FROM USERS WHERE UserName=@UserName AND Password=@Password";
                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);
                    //将数据库第一列的数据以Int32的格式返回
                    user.UserName = reader.GetString(1);
                    //将数据库第二列的数据以Int32的格式返回
                    user.Password = reader.GetString(2);
                    //将数据库第三列的数据以int32的格式返回

                    if (!reader.IsDBNull(3))
                    {
                        user.Email = reader.GetString(3);
                    }

                }
                return user;

            }
        }
    }
Publicado 64 artigos originais · ganhou elogios 15 · vê 10000 +

Acho que você gosta

Origin blog.csdn.net/YaraRen/article/details/103393116
Recomendado
Clasificación