Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 42799|Răspunde: 2

[Comunicare] Explicație detaliată a utilizării și introducerii arhitecturii cu trei straturi în C#, cu exemple

[Copiază linkul]
Postat pe 22.10.2014 21:59:33 | | |
Trei straturi: UI (interfață), BLL (stratul logicii de business), DAL (stratul de acces la date). Acestea trei sunt indispensabile, dintre care BLL și clasele din DAL sunt clase publice, deoarece UI trebuie să apeleze BLL, iar BLL să apeleze DAL, și UTILITY (metoda de bază pentru conectarea la baza de date și efectuarea operațiunilor de bază de "adăugare, ștergere, modificare și verificare"). În plus, pot exista și straturi de entități precum ENTITY (care mapează tabele de date) și Common (această bibliotecă plasează în general unele metode generale, cum ar fi metode de validare a datelor, metode de operare de control etc.).
Pe scurt, este
Accesarea datelor din baza de date este un strat de acces la date
Sortarea relațiilor de afaceri ale datelor conexe este un strat de logică de business
Reprezentarea datelor colectate arată că acesta este un strat de reprezentare.

Apropo, te-am ajutat să găsești niște informații:
       O structură ierarhică bună poate face diviziunea sarcinilor pentru dezvoltatori mai clară. Odată ce interfețele dintre straturi sunt definite, dezvoltatorii responsabili pentru diferite proiecte logice își pot dispersa eforturile și pot lucra mână în mână. De exemplu, personalul UI trebuie să ia în considerare doar experiența și funcționarea interfeței cu utilizatorul, proiectanții de domenii se pot concentra doar pe designul logicii de business, iar designerii de baze de date nu trebuie să se îngrijoreze de interacțiuni greoaie cu utilizatorii. Sarcina fiecărui dezvoltator este confirmată, iar progresul dezvoltării poate fi rapid îmbunătățit.

       Beneficiile cuplării slăbite sunt clare. Dacă un sistem nu este ierarhic, atunci logica lor este strâns interconectată și interdependentă, iar nimeni nu poate fi înlocuit. Odată ce are loc o schimbare, aceasta va afecta întregul corp, iar impactul asupra proiectului va fi extrem de grav. Reducerea dependenței dintre straturi nu doar că poate asigura scalabilitatea viitoare, dar poate avea și avantaje evidente în ceea ce privește reutilizabilitatea. Odată ce fiecare modul funcțional a definit o interfață unificată, poate fi chemat de fiecare modul fără a fi nevoie să dezvolte aceeași funcție în mod repetat.

       Pentru a realiza o structură ierarhică bună, standardele sunt, de asemenea, esențiale. Doar la un anumit nivel de standardizare acest sistem poate fi scalabil și înlocuibil. Comunicarea dintre straturi asigură, de asemenea, în mod necesar standardizarea interfețelor.

  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
Cod de copiere







Precedent:Multe unelte pentru plăci de rețea trebuie instalate cu winpcap, știi la ce folosește asta?
Următor:Fii atent la WeChat "Yantang Dairy" pentru a extrage premiul "ciuperca coroană" 100%.
Postat pe 06.10.2021 09:51:23 |
Noroc, mulțumesc proprietarului pentru că a oferit!!
Postat pe 06.10.2021 11:09:10 |
Află despre arhitectura pe trei niveluri în C#
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com