Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 42799|Respuesta: 2

[Comunicación] Explicación detallada del uso e introducción de la arquitectura de tres capas en C#, con ejemplos

[Copiar enlace]
Publicado en 22/10/2014 21:59:33 | | |
Tres capas: UI (interfaz), BLL (capa de lógica de negocio), DAL (capa de acceso a datos). Estas tres son imprescindibles, de las cuales BLL y las clases en DAL son públicas, porque la interfaz debe llamar a BLL, y BLL debe llamar a DAL, y UTILITY (el método subyacente para conectarse a la base de datos y realizar operaciones básicas de "añadir, eliminar, modificar y comprobar"). Además, también puede haber capas de entidad como ENTITY (que mapea tablas de datos) y Common (esta biblioteca generalmente incluye algunos métodos generales, como métodos de validación de datos, métodos de operación de control, etc.).
En pocas palabras, es
El acceso a datos desde la base de datos es una capa de acceso a datos
Ordenar las relaciones comerciales de datos relacionados es una capa de lógica de negocio
La representación de los datos recopilados muestra que esto es una capa de representación.

Por cierto, te ayudé a encontrar algo de información:
       Una buena estructura jerárquica puede aclarar la división del trabajo para los promotores. Una vez definidas las interfaces entre las capas, los desarrolladores responsables de diferentes diseños lógicos pueden dispersar sus esfuerzos y trabajar mano a mano. Por ejemplo, el personal de UI solo debe considerar la experiencia y el funcionamiento de la interfaz de usuario, los diseñadores de dominios solo pueden centrarse en el diseño de la lógica de negocio, y los diseñadores de bases de datos no tienen que preocuparse por interacciones de usuario engorrosas. La tarea de cada desarrollador queda confirmada y el progreso del desarrollo puede mejorarse rápidamente.

       Los beneficios del acoplamiento flojo son evidentes. Si un sistema no es jerárquico, entonces su lógica está estrechamente entrelazada e interdependiente, y nadie es reemplazable. Una vez que ocurre un cambio, afectará a todo el cuerpo y el impacto en el proyecto será extremadamente grave. Reducir la dependencia entre capas no solo puede garantizar la escalabilidad futura, sino que también tiene ventajas evidentes en la reutilización. Una vez que cada módulo funcional ha definido una interfaz unificada, puede ser llamado por cada módulo sin tener que desarrollar repetidamente la misma función.

       Para llevar a cabo un buen diseño jerárquico de estructuras, también son esenciales los estándares. Solo en cierto nivel de estandarización este sistema puede ser escalable y reemplazable. La comunicación entre capas también garantiza necesariamente la estandarización de las 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:Muchas herramientas de tarjetas de red necesitan instalarse con winpcap, ¿sabes para qué sirve?
Próximo:Presta atención a WeChat "Yantang Dairy" para sacar el premio "hongo corona" al 100%.
Publicado en 6/10/2021 9:51:23 |
¡Menos mal, gracias al propietario por proporcionarnos!
Publicado en 6/10/2021 11:09:10 |
Aprende sobre la arquitectura de tres niveles en C#
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com