C# 分層 三層架構 Very Very Good!

来源:http://www.cnblogs.com/smbk/archive/2016/03/31/5339610.html
-Advertisement-
Play Games

Hello! 歡迎新老朋友來到這裡,這裡隨時恭候你的大駕。 接下來說說三層架構↓↓↓↓↓↓ 三層架構分為:表現層(UI(User Interface))、業務邏輯層(BLL(Business Logic Layer))、數據訪問層(DAL(Data Access Layer))再加上實體類庫(Mod ...


Hello! 歡迎新老朋友來到這裡,這裡隨時恭候你的大駕。

接下來說說三層架構

三層架構分為:表現層(UI(User Interface))業務邏輯層(BLL(Business Logic Layer))、數據訪問層(DAL(Data Access Layer))再加上實體類庫(Model)

1、實體類庫(Model),主要存放資料庫中的表欄位。

操作:

(1)先建立實體類庫Model,打開項目,在解決方案中右鍵——>添加——>新建項目——>選中類庫——>改名Model——>確定

(2)選中Model類庫——>Shift+ALT+C——>建立實體類。UserInfo類

1 namespace Model
2 {
3    public  class UserInfo
4     {
5         public string  UserName { get; set; }
6         public string  Password { get; set; }
7     }
8 }

2、數據訪問層(DAL),主要是存放對數據類的訪問,即對資料庫的添加、刪除、修改、更新等基本操作

 

操作:

 

(1)先建立數據訪問層類庫DAL,打開項目,在解決方案中右鍵——>添加——>新建項目——>選中類庫——>改名DAL——>確定

(2)在DAL中添加對Model的引用,選中DAL--》Alt+P+R--》解決方案--》項目--》選中MOdel--》確定

(3)在DAL中添加對system.configuration的引用,選中DAL——>Alt+P+R——>程式集——>框架——>選中System.configuration——>確定

(4)建立數據訪問類,選中DAL——>Shift+ALT+C——>建立數據訪問類。UserDB類

 1 namespace DAL
 2 {
 3     class UserDB
 4     {
 5         private string connString = ConfigurationManager.ConnectionStrings[connString].ToString();
 6         public int AddUser(UserInfo userInfo)
 7         {
 8             //對資料庫進添加一個用戶操作
 9             string commandText = insert into UserInfo (userName,Password)values(@userName,@Password);
10             SqlParameter[] paras = new SqlParameter[]
11             { 
12            new SqlParameter (@userName,userInfo.UserName ),
13            new SqlParameter (@Password,userInfo.Password )
14             };
15             return SqlHelper.ExecuteNonQuery(connString, CommandType.Text, commandText, paras);
16         }
17     }

3、業務邏輯層(BLL)對傳送數據進行邏輯判斷分折,併進行傳送正確的值。

 

 

(1)先建立業務邏輯層類庫BLL,打開項目,在解決方案中右鍵——>添加——>新建項目——>選中類庫——>改名BLL——>確定

(2)在BLL中添加對Model、DAL的引用,選中BLL——>Alt+P+R——>解決方案——>項目——>選中MOdel、DAL——>確定

(3)建立業務邏輯類,選中BLL——>Shift+ALT+C——>建立業務邏輯類。LoginManager類

 1 namespace BLL
 2 {
 3     public class LoginManager
 4     {
 5         private UserDB userDB = new UserDB();
 6         public bool Add(UserInfo userInfo, out string messageStr)
 7         {
 8             messageStr = ;//返回界面層添加用戶返回信息
 9             bool isSuccess = false;
10             if (userInfo.UserName.Trim().Length != 0)//判斷從傳遞來的username是否為空
11             {
12                 if (userDB.IsEquals(userInfo))//傳給DALl操作判斷資料庫中是否有重覆值
13                 {
14                     userDB.AddUser(userInfo);//傳給DAL操作增加一個新用戶
15                     isSuccess = true;
16                 }
17                 else
18                     messageStr = 有相同的值;
19             }
20             else
21             {
22                 messageStr = 不能為空;
23  
24             }
25             return isSuccess;//返回界面層是否添加成功
26         }
27     }
28 }

4.表現層(UI)即用戶界面層

 

(1)在UI中添加對Model、BLL的引用,選中UI--》Alt+P+R--》解決方案--》項目--》選中MOdel、BLL--》確定

(2)編寫代碼傳遞數據給BLL層。

 1  UserInfo userInfo;
 2     LoginManager lm = new LoginManager();
 3     private void btnAdd_Click(object sender, EventArgs e)
 4     {
 5         userInfo = new UserInfo()
 6         {
 7             UserName = txtUserName.Text.Trim(),
 8             Password = txtPassword.Text.Trim()
 9         };
10         string messageStr = ;
11  
12         if (lm.Add(userInfo, out  messageStr))
13         {
14             MessageBox.Show(添加成功);
15         }
16         else
17         {
18             MessageBox.Show(messageStr);
19             txtUserName.Focus();
20         }
21  
22     }
23 }

 

再來說一下怎麼實現如下圖所示   三個表的信息顯示在一個控制項

想要實現下圖內容  ,  首先要從學生表(Student)、從科目表(Subject)、從成績表(StudentResult)分別拿到學生姓名、科目名、考試成績和考試時間。

首先添加一個擴展類,這裡要用到繼承

namespace Combox.Model
{
   public class StudentExtens:Student
    {
        public string SubjectName { get; set; }
        public int StudentResult { get; set; }
        public DateTime ExamDate { get; set; }
    }
}

繼續DAL層

 

 1 public List<StudentExtens> SelectStudentResult() 
 2         {
 3             //查看學生成績
 4             List<StudentExtens> list = new List<StudentExtens>();
 5             SqlConnection con = new SqlConnection("Server=192.168.15.21;initial catalog=MySchool;uid=sa;");
 6             DataTable dt = SQLHelper.ExecuteDataTable(@"select studentname,subjectname,studentresult,examdate from student,subject,result where student.studentno=result.studentno and result.subjectid=subject.subjectid");
 7             foreach (DataRow item in dt.Rows)
 8             {
 9                 StudentExtens se = new StudentExtens();
10                 se.StudentName = item["studentname"].ToString();
11                 se.SubjectName = item["subjectname"].ToString();
12                 se.StudentResult = Convert.ToInt32(item["studentresult"]);
13                 se.ExamDate = Convert.ToDateTime(item["examdate"]);
14                 list.Add(se);
15             }
16             return list;
17         }

接下來是BLL層

 1 namespace Combox.BLL
 2 {
 3    public class StudentBLL
 4     {
 5        StudentDAL sd = new StudentDAL();
 6        public List<StudentExtens> SelectStudentResult()
 7        {
 8           return sd.SelectStudentResult();
 9        }
10     }
11 }

在UI進行調用

1            StudentBLL sb = new StudentBLL();
2            List<StudentExtens> list = sb.SelectStudentResult();
3            dgvlist.DataSource = list;

 

 

親們!到這裡分層先告一段落。 感謝關註過我、正在關註我、將要關註我的朋友。一起努力加油!

     在這個弱肉強食的時代我們只能:

               狼行千里吃肉!公司里一個團隊的作戰能力決定你分的肉多少。

    十年、二十年以後的你,會回想起現在的你。至於那個時候的你,是否會感謝現在坐在電腦屏幕前的你,答案就在我們每一天里!

                                                                                   愛編碼愛生活愛音樂愛文字愛小M

                                                                                                   16年三月的最後一天


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們知道VMware的網路適配器類型有多種,例如E1000、VMXNET、VMXNET 2 (Enhanced)、VMXNET3等,就性能而言,一般VMXNET3要優於E1000,下麵介紹如果將Linux虛擬機的網路適配器類型從E1000改為VMXNET3。本文測試環境如下 操作系統 :Oracle... ...
  • 顯示層面頭文件 定義結構體,為顯示統一標準 int (*DeviceInit)(void); 顯示類驅動初始化 int (*ShowPixel)(int iPenX, int iPenY, unsigned int dwColor); 對某一點進行瞄色 int (*CleanScreen)(unsi... ...
  • 先寫一個完善的電子書框架,完善之前寫的功能拼接到一塊,實現多種文本文件格式打開解碼顯示, 多種字體顯示,設置文字大小,將以前混亂的程式按塊封裝 ...
  • 1、為什麼需要擴展方法 .NET3.5給我們提供了擴展方法的概念,它的功能是在不修改要添加類型的原有結構時,允許你為類或結構添加新方法。 思考:那麼究竟為什麼需要擴展方法呢,為什麼不直接修改原有類型呢? 首先,假設我們的項目中有一個類,後來過了一段時間,我們明確的知道需要為該類添加一個新功能,考慮這 ...
  • 說起那個無限級分類,相信很多人都知道是什麼東西,也曾經做過。我也相信,大家用得最多的實現方式就是做一個遞歸。 最近我也要做一個帶無限級分類的菜單,但是我又不想用遞歸來做,所以我需要用其他方式來實現,那就是迭代了。 首先,我需要定義一個實體模型,這舉一個省市無限級的例子: class Loaction ...
  • Asp.net的優勢就在於快速構建應用,而對於一些最基礎數據的增刪改以及分頁事件或者樣式的設定可以通過在父類中寫上虛方法來供子類調用,如果子類需要在模板的基礎上衍生變化或者索性不要父類的方法的話,則只需要重寫父類的方法即可。 實驗代碼如下: 首先是模板類的抽象,繼承自Page類; 1 public ...
  • 我們知道,在C#中,string是引用類型的。為空情況有以下三種: 1、 string str1="":會定義指針(棧),併在記憶體里劃一塊值為空的存儲空間(堆),指針指向這個空間。 2、String str2=String.Empty:同上。但是這是個靜態方法,不會反覆的重覆申請記憶體,要優於1中的方 ...
  • 可空值類型,正如字面意義上的,是可以為NULL的值類型。 這個東西存在的意義可以解決比如資料庫的的Int可以為NUll的情況,使得處理資料庫數據更簡單。 實際上可空值類型就是Nullable<T>這個泛型值類型,而C#有一種更簡單的語法糖是int?這種用法: 可空值類型的更多玩法 在大多數時候用C# ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...