Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 42799|Antwoord: 2

[Communicatie] Gedetailleerde uitleg van het gebruik en de introductie van de drielaagse architectuur in C#, met voorbeelden

[Link kopiëren]
Geplaatst op 22-10-2014 21:59:33 | | |
Drie lagen: UI (interface), BLL (business logic layer), DAL (data access layer). Deze drie zijn must-haves, waarvan BLL en de klassen in DAL publieke klassen zijn, omdat de UI BLL moet aanroepen, BLL en DAL, en UTILITY (de onderliggende methode om verbinding te maken met de database en basisbewerkingen uit te voeren zoals "toevoegen, verwijderen, wijzigen en controleren"). Daarnaast kunnen er ook entiteitlagen zijn zoals ENTITY (die datatabellen mappt) en Common (deze bibliotheek bevat doorgaans enkele algemene methoden, zoals datavalidatiemethoden, controleoperatiemethoden, enz.).
Simpel gezegd, dat is het
Het benaderen van data uit de database is een data-toegangslaag
Het oplossen van de zakelijke relaties van gerelateerde data vormt een laag van bedrijfslogica
De representatie van de gecolleduceerde data toont aan dat dit een representatielaag is.

Trouwens, ik heb je geholpen wat informatie te vinden:
       Een goede hiërarchische structuur kan de taakverdeling voor ontwikkelaars duidelijker maken. Zodra de interfaces tussen de lagen zijn gedefinieerd, kunnen ontwikkelaars die verantwoordelijk zijn voor verschillende logicaontwerpen hun inspanningen verspreiden en hand in hand werken. UI-personeel hoeft bijvoorbeeld alleen rekening te houden met de ervaring en werking van de gebruikersinterface, domeinontwerpers kunnen zich alleen richten op het ontwerp van bedrijfslogica, en databaseontwerpers hoeven zich geen zorgen te maken over omslachtige gebruikersinteracties. De taak van elke ontwikkelaar wordt bevestigd en de ontwikkelingsvoortgang kan snel worden verbeterd.

       De voordelen van losse koppeling zijn duidelijk. Als een systeem niet hiërarchisch is, dan is hun logica nauw met elkaar verweven en onderling afhankelijk, en is niemand vervangbaar. Zodra er een verandering plaatsvindt, zal dit het hele lichaam beïnvloeden en zal de impact op het project uiterst ernstig zijn. Het verminderen van de afhankelijkheid tussen lagen kan niet alleen toekomstige schaalbaarheid garanderen, maar ook duidelijke voordelen bieden qua herbruikbaarheid. Zodra elke functionele module een uniforme interface heeft gedefinieerd, kan deze door elke module worden aangeroepen zonder dat dezelfde functie herhaaldelijk hoeft te ontwikkelen.

       Om een goed hiërarchisch structuurontwerp te realiseren, zijn standaarden ook essentieel. Alleen op een bepaald niveau van standaardisatie kan dit systeem schaalbaar en vervangbaar zijn. De communicatie tussen lagen zorgt ook noodzakelijkerwijs voor de standaardisatie van 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 kopiëren







Vorig:Veel netwerkkaarttools moeten met winpcap worden geïnstalleerd, weet je waar dat voor is?
Volgend:Let op WeChat "Yantang Dairy" om de "kroonschimmel" prijs 100% te winnen.
Geplaatst op 06-10-2021 09:51:23 |
Gelukkig maar, bedankt aan de eigenaar voor het aanleveren!!
Geplaatst op 06-10-2021 11:09:10 |
Leer over de drie-lagige architectuur in C#
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com