Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 42799|Отговор: 2

[Комуникация] Подробно обяснение на използването и въвеждането на трислойната архитектура в C#, с примери

[Копирай линк]
Публикувано в 22.10.2014 г. 21:59:33 ч. | | |
Три слоя: UI (интерфейс), BLL (бизнес логически слой), DAL (слой за достъп до данни) Тези три са задължителни, като BLL и класовете в DAL са публични класове, защото потребителският интерфейс трябва да извиква BLL, а BLL трябва да извиква DAL, и UTILITY (основният метод за свързване с базата данни и изпълнение на основни операции като "добавяне, изтриване, модифициране и проверка"). Освен това могат да има и слоеве на обекти като ENTITY (който картографира таблици с данни) и Common (тази библиотека обикновено използва някои общи методи, като методи за валидиране на данни, методи на управление и др.).
Просто казано, така е
Достъпът до данни от базата данни е слой за достъп до данни
Изясняването на бизнес взаимоотношенията на свързаните данни е слой бизнес логика
Представянето на събраните данни показва, че това е слой на представяне.

Между другото, помогнах ти да намериш малко информация:
       Добра йерархична структура може да направи разделението на труда за разработчиците по-ясно. След като интерфейсите между слоевете са дефинирани, разработчиците, отговорни за различни логически дизайни, могат да разпръснат усилията си и да работят ръка за ръка. Например, персоналът на UI трябва да вземе предвид само опита и работата на потребителския интерфейс, дизайнерите на домейн могат да се фокусират само върху дизайна на бизнес логиката, а дизайнерите на бази данни не трябва да се притесняват за тромави потребителски взаимодействия. Задачата на всеки разработчик е потвърдена и напредъкът може бързо да се подобри.

       Ползите от слабото свързване са ясни. Ако една система не е йерархична, тогава логиката ѝ е тясно преплетена и взаимозависима и никой не е заменим. След като настъпи промяна, тя ще засегне цялото тяло и въздействието върху проекта ще бъде изключително сериозно. Намаляването на зависимостта между слоевете може не само да гарантира бъдеща мащабируемост, но и да има очевидни предимства за многократна употреба. След като всеки функционален модул дефинира унифициран интерфейс, той може да бъде извикан от всеки модул без да се налага да разработва една и съща функция многократно.

       За да се осъществи добър йерархичен структурен дизайн, стандартите също са от съществено значение. Само на определено ниво на стандартизация тази система може да бъде мащабируема и заменяема. Комуникацията между слоевете също така задължително гарантира стандартизацията на интерфейсите.

  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
Копирай код







Предишен:Много инструменти за мрежови карти трябва да се инсталират с winpcap, знаете ли за какво служи това?
Следващ:Обърнете внимание на WeChat "Yantang Dairy", за да спечелите наградата "коронна гъба" на 100%.
Публикувано в 6.10.2021 г. 9:51:23 ч. |
Добре е, благодаря на собственика за предоставеното!!
Публикувано в 6.10.2021 г. 11:09:10 ч. |
Научете повече за тристепенната архитектура в C#
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com