Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 42799|Resposta: 2

[Comunicação] Explicação detalhada do uso e introdução da arquitetura de três camadas em C#, com exemplos

[Copiar link]
Publicado em 22/10/2014 21:59:33 | | |
Três camadas: UI (interface), BLL (camada de lógica de negócios), DAL (camada de acesso a dados). Essas três são indispensáveis, das quais BLL e as classes em DAL são classes públicas, porque a interface precisa chamar BLL, BLL precisa chamar DAL, e UTILITY (o método subjacente para se conectar ao banco de dados e realizar operações básicas de "adicionar, excluir, modificar e verificar"). Além disso, também podem existir camadas de entidade, como ENTITY (que mapeia tabelas de dados) e Common (essa biblioteca geralmente coloca alguns métodos gerais, como métodos de validação de dados, métodos de operação de controle, etc.).
Simplificando, é
O acesso a dados do banco de dados é uma camada de acesso a dados
Organizar os relacionamentos comerciais de dados relacionados é uma camada de lógica de negócios
A representação dos dados agrupados mostra que isso é uma camada de representação.

Aliás, eu te ajudei a encontrar algumas informações:
       Uma boa estrutura hierárquica pode deixar a divisão de tarefas dos desenvolvedores mais clara. Uma vez definidas as interfaces entre as camadas, os desenvolvedores responsáveis por diferentes projetos lógicos podem dispersar seus esforços e trabalhar lado a lado. Por exemplo, o pessoal de UI só precisa considerar a experiência e o funcionamento da interface do usuário, os designers de domínio só podem focar no design da lógica de negócios, e os designers de banco de dados não precisam se preocupar com interações complicadas com o usuário. A tarefa de cada desenvolvedor é confirmada, e o progresso do desenvolvimento pode ser rapidamente melhorado.

       Os benefícios do acoplamento frouxo são claros. Se um sistema não é hierárquico, então sua lógica é fortemente entrelaçada e interdependente, e ninguém é substituível. Uma vez que uma mudança ocorra, ela afetará todo o corpo, e o impacto no projeto será extremamente sério. Reduzir a dependência entre camadas pode não apenas garantir escalabilidade futura, mas também trazer vantagens óbvias em reutilização. Uma vez que cada módulo funcional tenha definido uma interface unificada, ele pode ser chamado por cada módulo sem precisar desenvolver a mesma função repetidamente.

       Para realizar um bom desenho de estrutura hierárquica, padrões também são essenciais. Somente em certo nível de padronização esse sistema pode ser escalável e substituível. A comunicação entre camadas também garante necessariamente a padronização das interfaces.

  1. 代码

  2.         /// <summary>
  3.         /// 初始化登录名称、登录密码(Model类)
  4.         /// </summary>
  5.         private string adminUser = string.Empty; //设置用户名称为空值
  6.         private string adminPwd = string.Empty; //设置用户密码为空值
  7.         public string AdminUser
  8.         {
  9.             get
  10.             {
  11.                 return this.adminUser;
  12.             }
  13.             set
  14.             {
  15.                 this.adminUser = value;
  16.             }
  17.         }
  18.         public string AdminPwd
  19.         {
  20.             get
  21.             {
  22.                 return this.adminPwd;
  23.             }
  24.             set
  25.             {
  26.                 this.adminPwd = value;
  27.             }
  28.         }

  29. 代码

  30.         /// <summary>
  31.         /// 用户登录(BLL类)
  32.         /// </summary>
  33.         /// <param name="m"></param>
  34.         /// <returns></returns>
  35.         public static int sysLogin(Model m)
  36.         {
  37.             string str = "adminValid"; //存储过程名称
  38.             SqlParameter[] sqlParameter =
  39.                 {
  40.                     // 将UI层传递过来的用户名称和密码赋值给存储过程中的变量分别是adminUser和adminPwd(注意大小写)
  41.                     new SqlParameter("adminUser",m.AdminUser),
  42.                     new SqlParameter("adminPwd",m.AdminPwd)
  43.                 };
  44.             DAL d = new DAL();
  45.             return Int32.Parse(d.ExecuteScalar(str,sqlParameter));
  46.         }

  47. 代码

  48.         /// <summary>
  49.         /// 新建一个SQL登录链接
  50.         /// </summary>
  51.         /// <returns></returns>
  52.         private static SqlConnection con()
  53.         {
  54.             return new SqlConnection("Data Source=localhost;Initial Catalog=数据库名称;Integrated Security=SSPI;");
  55.         }
  56.         /// <summary>
  57.         /// 执行操作(DAL类)
  58.         /// </summary>
  59.         /// <param name="str"></param>
  60.         /// <param name="sql"></param>
  61.         /// <returns></returns>
  62.         public string ExecuteScalar(string str, SqlParameter[] sql)
  63.         {
  64.             SqlConnection con = DAL.con();
  65.             try
  66.             {
  67.                 con.Open();
  68.                 SqlCommand com = new SqlCommand(str, con);
  69.                 com.CommandType = CommandType.StoredProcedure;
  70.                 com.Parameters.AddRange(sql);
  71.                 return Convert.ToString(com.ExecuteScalar()); //返回受影响的行数(例如影响的行数为1,那么返回数值1到BLL层,然后BLL层将数值1返回到UI层)
  72.             }
  73.             catch (Exception Error)
  74.             {
  75.                 throw Error;
  76.             }
  77.             finally
  78.             {
  79.                 con.Close();
  80.             }
  81.         }

  82. 代码

  83.         //UI 层
  84.         Model m = new Model(); //实例化Model类
  85.         m.AdminUser = this.TextBox1.Text.ToString(); //将文本框1中的值传递给Model类中的AdminUser
  86.         m.AdminPwd = this.TextBox2.Text.ToString(); //将文本框2中的值传递给Model类中的AdminPwd
  87.         if (BLL.sysLogin(m) > 0)
  88.         {
  89.             this.Label1.Text = "登录成功!马上进入管理平台...";
  90.         }
  91.         else
  92.         {
  93.             this.Label1.Text = "用户或密码错误,请重新输入!";
  94.         }

  95. 代码

  96. --存储过程 (SQL2005)
  97. set ANSI_NULLS ON
  98. set QUOTED_IDENTIFIER ON
  99. go

  100. ALTER PROC [dbo].[adminValid]
  101. @adminUser varchar(20),@adminPwd varchar(120)
  102. AS
  103. SELECT COUNT(*) FROM admin WHERE adminUser = @adminUser AND adminPwd = @adminPwd
Copiar código







Anterior:Muitas ferramentas de placa de rede precisam ser instaladas com winpcap, você sabe para que serve?
Próximo:Preste atenção no WeChat "Yantang Dairy" para tirar o prêmio "fungo coroa" 100%
Publicado em 06/10/2021 09:51:23 |
Ainda bem, obrigado ao dono por fornecer!!
Publicado em 06/10/2021 11:09:10 |
Aprenda sobre a arquitetura de três níveis em C#
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com