이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 42799|회답: 2

[통신] C#에서 3계층 아키텍처의 사용 및 도입에 대한 자세한 설명과 예시를 포함합니다

[링크 복사]
게시됨 2014. 10. 22. 오후 9:59:33 | | |
세 가지 계층: UI(인터페이스), BLL(비즈니스 논리 계층), DAL(데이터 접근 계층) 이 세 가지는 필수이며, BLL과 DAL의 클래스는 공개 클래스입니다. 왜냐하면 UI가 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을 설치해야 하는데, 이게 무슨 용도인지 아시나요?
다음:위챗 "옌탕 유제품"에 주목해 보세요. "왕관 버섯" 상을 100% 뽑으세요.
게시됨 2021. 10. 6. 오전 9:51:23 |
다행이에요, 주인님께 감사드립니다!!
게시됨 2021. 10. 6. 오전 11:09:10 |
C#의 3단계 아키텍처에 대해 알아보세요
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com