Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 42799|Svar: 2

[Kommunikation] Detaljerad förklaring av användningen och introduktionen av trelagersarkitekturen i C#, med exempel

[Kopiera länk]
Publicerad på 2014-10-22 21:59:33 | | |
Tre lager: UI (gränssnitt), BLL (affärslogiklager), DAL (dataåtkomstlager). Dessa tre är måste, varav BLL och klasserna i DAL är publika klasser, eftersom UI behöver anropa BLL, och BLL måste anropa DAL, samt UTILITY (den underliggande metoden för att ansluta till databasen och utföra grundläggande operationer som "lägga till och radera, ändra och kontrollera"). Dessutom kan det finnas entitetslag som ENTITY (som mappar datatabeller) och Common (detta bibliotek innehåller generellt några allmänna metoder, såsom datavalideringsmetoder, kontrolloperationer med mera).
Enkelt uttryckt, det är det
Åtkomst till data från databasen är ett dataåtkomstlager
Att reda ut affärsrelationerna för relaterad data är ett lager av affärslogik
Representationen av de sammanställda uppgifterna visar att detta är ett representationslager.

Förresten, jag hjälpte dig att hitta lite information:
       En bra hierarkisk struktur kan göra arbetsfördelningen för utvecklare tydligare. När gränssnitten mellan lagren är definierade kan utvecklare som ansvarar för olika logikdesigner sprida ut sina ansträngningar och arbeta hand i hand. Till exempel behöver UI-personal bara ta hänsyn till användargränssnittets upplevelse och funktion, domändesigners kan bara fokusera på design av affärslogik, och databasdesigners behöver inte oroa sig för krångliga användarinteraktioner. Varje utvecklares uppgift bekräftas och utvecklingsutvecklingen kan snabbt förbättras.

       Fördelarna med lös koppling är tydliga. Om ett system inte är hierarkiskt är deras logik tätt sammanflätad och ömsesidigt beroende, och ingen är utbytbar. När en förändring sker kommer den att påverka hela kroppen, och påverkan på projektet kommer att bli extremt allvarlig. Att minska beroendet mellan lager kan inte bara säkerställa framtida skalbarhet, utan också ge uppenbara fördelar i återanvändbarhet. När varje funktionell modul har definierat ett enhetligt gränssnitt kan det anropas av varje modul utan att behöva utveckla samma funktion upprepade gånger.

       För att genomföra en bra hierarkisk strukturdesign är standarder också nödvändiga. Endast på en viss standardiseringsnivå kan detta system vara skalbart och utbytbart. Kommunikationen mellan lager säkerställer också nödvändigtvis standardisering av gränssnitten.

  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
Kopiera koden







Föregående:Många nätverkskortsverktyg måste installeras med winpcap, vet du vad det är till för?
Nästa:Lyssna på WeChat "Yantang Dairy" för att dra 100% priset för "kronsvampen"
Publicerad på 2021-10-06 09:51:23 |
Tur saken, tack till ägaren för att du bidrog med det!!
Publicerad på 2021-10-06 11:09:10 |
Lär dig om den trestegsarkitekturen i C#
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com