Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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%.
Опубликовано 06.10.2021 9:51:23 |
Хорошо, спасибо владельцу за предоставление!!
Опубликовано 06.10.2021 11:09:10 |
Узнайте о трёхуровневой архитектуре на C#
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com