Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 42799|Risposta: 2

[Comunicazione] Spiegazione dettagliata dell'uso e dell'introduzione dell'architettura a tre livelli in C#, con esempi

[Copiato link]
Pubblicato su 22/10/2014 21:59:33 | | |
Tre livelli: UI (interfaccia), BLL (livello logica aziendale), DAL (livello di accesso dati). Questi tre sono indispensabili, tra cui BLL e le classi in DAL sono classi pubbliche, perché l'interfaccia deve chiamare BLL, BLL deve chiamare DAL, e UTILITY (il metodo sottostante per connettersi al database ed eseguire operazioni di base di "aggiunta, cancellazione, modifica e controllo"). Inoltre, possono esserci anche layer di entità come ENTITY (che mappa le tabelle dati) e Common (questa libreria generalmente inserisce alcuni metodi generali, come metodi di validazione dati, metodi di controllo operativo, ecc.).
In poche parole, lo è
L'accesso ai dati dal database è uno strato di accesso ai dati
Ordinare le relazioni di business dei dati correlati è uno strato di logica aziendale
La rappresentazione dei dati raccolti mostra che si tratta di uno strato di rappresentazione.

A proposito, ti ho aiutato a trovare alcune informazioni:
       Una buona struttura gerarchica può rendere più chiara la divisione del lavoro per gli sviluppatori. Una volta definite le interfacce tra i livelli, gli sviluppatori responsabili di diversi progetti logici possono distribuire i loro sforzi e lavorare fianco a fianco. Ad esempio, il personale UI deve considerare solo l'esperienza e il funzionamento dell'interfaccia utente, i domain designer possono concentrarsi solo sulla progettazione della logica aziendale e i designer di database non devono preoccuparsi di interazioni ingombranti con gli utenti. Il compito di ogni sviluppatore viene confermato e il progresso dello sviluppo può essere rapidamente migliorato.

       I vantaggi dell'accoppiamento debole sono evidenti. Se un sistema non è gerarchico, allora la loro logica è strettamente intrecciata e interdipendente, e nessuno è sostituibile. Una volta avvenuto un cambiamento, questo colpirà l'intero corpo e l'impatto sul progetto sarà estremamente grave. Ridurre la dipendenza tra i livelli può non solo garantire la scalabilità futura, ma avere anche evidenti vantaggi in termini di riutilizzabilità. Una volta che ogni modulo funzionale ha definito un'interfaccia unificata, può essere chiamato da ciascun modulo senza dover sviluppare ripetutamente la stessa funzione.

       Per realizzare una buona progettazione gerarchica, sono essenziali anche gli standard. Solo a un certo livello di standardizzazione questo sistema può essere scalabile e sostituibile. La comunicazione tra i livelli garantisce necessariamente anche la standardizzazione delle interfacce.

  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
Copia codice







Precedente:Molti strumenti per schede di rete devono essere installati con winpcap, sai a cosa serve?
Prossimo:Fai attenzione a WeChat "Yantang Dairy" per estrarre il premio "fungo corona" al 100%.
Pubblicato su 06/10/2021 09:51:23 |
Meno male, grazie al proprietario per avermi fornito!!
Pubblicato su 06/10/2021 11:09:10 |
Scopri l'architettura a tre livelli in C#
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com