Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 42799|Répondre: 2

[Communication] Explication détaillée de l’utilisation et de l’introduction de l’architecture à trois couches en C#, avec des exemples

[Copié le lien]
Publié sur 22/10/2014 21:59:33 | | |
Trois couches : UI (interface), BLL (couche de logique métier), DAL (couche d’accès aux données). Ces trois sont des indispensables, dont BLL et les classes dans DAL sont des classes publiques, car l’UI doit appeler BLL, BLL doit appeler DAL, et UTILITY (la méthode sous-jacente pour se connecter à la base de données et effectuer des opérations de base de base d'« addition, suppression, modification et vérification »). De plus, il peut aussi exister des couches d’entités telles que ENTITY (qui mappe les tables de données) et Common (cette bibliothèque place généralement des méthodes générales, telles que des méthodes de validation des données, des méthodes d’opérations de contrôle, etc.).
En résumé, c’est le cas
L’accès aux données depuis la base de données est une couche d’accès aux données
Trier les relations commerciales des données associées est une couche de logique métier
La représentation des données rassemblées montre qu’il s’agit d’une couche de représentation.

Au fait, je vous ai aidé à trouver quelques informations :
       Une bonne structure hiérarchique peut rendre la division du travail pour les développeurs plus claire. Une fois les interfaces entre les couches définies, les développeurs responsables de différentes conceptions logiques peuvent disperser leurs efforts et travailler main dans la main. Par exemple, le personnel UI n’a à prendre en compte que l’expérience et le fonctionnement de l’interface utilisateur, les concepteurs de domaines ne peuvent se concentrer que sur la conception de la logique métier, et les concepteurs de bases de données n’ont pas à se soucier des interactions utilisateur lourdes. La tâche de chaque développeur est confirmée, et l’avancement du développement peut être rapidement amélioré.

       Les avantages du couplage lâche sont évidents. Si un système n’est pas hiérarchique, alors sa logique est étroitement liée et interdépendante, et personne n’est remplaçable. Une fois qu’un changement a lieu, il affectera l’ensemble du corps, et l’impact sur le projet sera extrêmement grave. Réduire la dépendance entre les couches peut non seulement garantir une évolutivité future, mais aussi présenter des avantages évidents en matière de réutilisation. Une fois que chaque module fonctionnel a défini une interface unifiée, il peut être appelé par chaque module sans avoir à développer la même fonction à plusieurs reprises.

       Pour réaliser une bonne conception hiérarchique de la structure, les normes sont également essentielles. Ce n’est qu’à un certain niveau de normalisation que ce système peut être évolutif et remplaçable. La communication entre les couches assure également nécessairement la standardisation des 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
Code de copie







Précédent:Beaucoup d’outils de carte réseau doivent être installés avec winpcap, savez-vous à quoi cela sert ?
Prochain:Faites attention à WeChat « Yantang Dairy » pour tirer le prix du « champignon couronne » à 100 %.
Publié sur 06/10/2021 09:51:23 |
Heureusement, merci au propriétaire pour avoir fourni !!
Publié sur 06/10/2021 11:09:10 |
Découvrez l’architecture à trois niveaux en C#
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com