Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 42799|Odpowiedź: 2

[Komunikacja] Szczegółowe wyjaśnienie użycia i wprowadzenia architektury trójwarstwowej w C#, z przykładami

[Skopiuj link]
Opublikowano 22.10.2014 21:59:33 | | |
Trzy warstwy: UI (interfejs), BLL (warstwa logiki biznesowej), DAL (warstwa dostępu do danych). Te trzy są niezbędne – BLL i klasy w DAL są klasami publicznymi, ponieważ UI musi wywołać BLL, a BLL DAL oraz UTILITY (metoda podstawowa do łączenia się z bazą danych i wykonywania podstawowych operacji "dodawania, usuwania, modyfikowania i sprawdzania"). Ponadto mogą istnieć warstwy encji, takie jak ENTITY (mapująca tabele danych) oraz Common (ta biblioteka zazwyczaj umieszcza ogólne metody, takie jak metody walidacji danych, metody operacji sterowania itp.).
Mówiąc wprost, tak jest
Dostęp do danych z bazy danych to warstwa dostępu do danych
Sortowanie relacji biznesowych powiązanych danych to warstwa logiki biznesowej
Reprezentacja zebranych danych pokazuje, że jest to warstwa reprezentacji.

A tak przy okazji, pomogłem ci znaleźć pewne informacje:
       Dobra struktura hierarchiczna może ułatwić podział pracy dla deweloperów. Gdy interfejsy między warstwami zostaną zdefiniowane, deweloperzy odpowiedzialni za różne projekty logiki mogą rozdzielić swoje wysiłki i współpracować ramię w ramię. Na przykład pracownicy UI muszą jedynie uwzględnić doświadczenie i działanie interfejsu użytkownika, projektanci domen mogą skupić się wyłącznie na projektowaniu logiki biznesowej, a projektanci baz danych nie muszą martwić się o uciążliwe interakcje z użytkownikami. Zadanie każdego dewelopera jest potwierdzane, a postępy w rozwoju mogą być szybko usprawnione.

       Zalety luźnego sprzęgania są oczywiste. Jeśli system nie jest hierarchiczny, to jego logika jest ściśle powiązana i zależna, i nikt nie jest zastąpiony. Gdy zmiana zachodzi, wpłynie ona na całe ciało, a wpływ na projekt będzie niezwykle poważny. Zmniejszenie zależności między warstwami może nie tylko zapewnić przyszłą skalowalność, ale także mieć oczywiste zalety w zakresie ponownego użycia. Gdy każdy moduł funkcyjny zdefiniuje zunifikowany interfejs, może być wywoływany przez każdy moduł bez konieczności wielokrotnego rozwijania tej samej funkcji.

       Aby przeprowadzić dobry projekt struktury hierarchicznej, niezbędne są również standardy. Tylko na pewnym poziomie standaryzacji ten system może być skalowalny i zastępowalny. Komunikacja między warstwami również nieustannie zapewnia standaryzację interfejsów.

  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
Skopiuj kod







Poprzedni:Wiele narzędzi do kart sieciowych wymaga zainstalowania winpcap, wiesz, do czego to służy?
Następny:Zwróć uwagę na WeChat "Yantang Dairy", aby wylosować nagrodę "grzyb koronowy" w 100%
Opublikowano 06.10.2021 09:51:23 |
Dobrze, dziękuję właścicielowi za udostępnienie!!
Opublikowano 06.10.2021 11:09:10 |
Dowiedz się więcej o architekturze trójpoziomowej w C#
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com