Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 42799|Válasz: 2

[Kommunikáció] Részletes magyarázat a háromrétegű architektúra használatáról és bevezetéséről a C#-ban, példákkal

[Linket másol]
Közzétéve 2014. 10. 22. 21:59:33 | | |
Három réteg: UI (interfész), BLL (üzleti logikai réteg), DAL (adathozzáférési réteg) Ezek a három kötelező megoldás, amelyek közül a BLL és a DAL osztályai nyilvános osztályok, mert a UI-nak BLL-t kell hívnia, a BLL-nek a DAL-t és a UTILITY-t (az adatbázishoz való csatlakozás és az alapvető műveletek elvégzése, mint az "hozzáadás, törlés, módosítás és ellenőrzés" alapvető műveletei). Ezen felül létezhetnek entitásrétegek is, mint például az ENTITY (amely adattáblákat térképez) és a Common (ez a könyvtár általában néhány általános módszert is tartalmaz, például adatigazoló módszereket, vezérlő műveleti módszereket stb.).
Egyszerűen fogalmazva, ez
Az adatbázisból származó adatokhoz való hozzáférés egy adathozzáférési réteg
Az üzleti kapcsolatok rendezése a kapcsolódó adatok egy üzleti logika rétege
Az összegyűjtött adatok ábrázolása azt mutatja, hogy ez egy reprezentációs réteg.

Egyébként segítettem találni néhány információt:
       Egy jó hierarchikus struktúra világosabbá teheti a fejlesztők munkamegosztását. Miután a rétegek közötti interfészek definiálásra kerültek, a különböző logikai tervekért felelős fejlesztők szétoszthatják erőfeszítéseiket és kéz a kézben dolgozhatnak. Például a felhasználói felület személyzetének csak a felhasználói felület tapasztalatát és működését kell figyelembe venniük, a domaintervezők csak az üzleti logika tervezésére koncentrálhatnak, és az adatbázis-tervezőknek nem kell aggódniuk a bonyolult felhasználói interakciók miatt. Minden fejlesztő feladata megerősítve kerül, és a fejlesztés előrehaladása gyorsan javítható.

       A laza csatolás előnyei egyértelműek. Ha egy rendszer nem hierarchikus, akkor a logikája szorosan összefonódik és egymástól függ, és senki sem cserélhető. Ha változás történik, az az egész testre hatással lesz, és a projektre gyakorolt hatása rendkívül súlyos lesz. A rétegek közötti függőség csökkentése nemcsak a jövőbeli skálázhatóságot biztosíthatja, hanem nyilvánvaló előnyöket is jelenthet az újrahasználhatóság terén. Miután minden funkcionális modul egységes interfészt definiált, minden modul meghívhatja anélkül, hogy ugyanazt a függvényt ismételten kellene fejleszteniük.

       A jó hierarchikus szerkezettervezéshez a szabványok is elengedhetetlenek. Csak bizonyos szintű szabványosítás esetén lehet ez a rendszer skálázható és cserélhető. A rétegek közötti kommunikáció szükségszerűen biztosítja az interfészek szabványosítását is.

  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
Kód másolása







Előző:Sok hálózati kártya eszközt kell telepíteni a winpcap-hez, tudod, mire való?
Következő:Figyelj a WeChat "Yantang Dairy" címére, hogy 100%-ban nyerd a "koronagomba" díjat.
Közzétéve 2021. 10. 06. 9:51:23 |
Jó, köszönöm a tulajdonosnak, hogy segített!!
Közzétéve 2021. 10. 06. 11:09:10 |
Ismerje meg a háromszintű architektúrát a C# nyelvén
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com