Web入門程序——三層架構
「三層架構體系的應用程序將業務規則、數據訪問、合法性校驗等工作放到了中間層進行處理。通常情況下,客戶端不直接與資料庫進行交互,而是通過COM/DCOM通訊與中間層建立連接,再經由中間層與資料庫進行交互,最終在界面表示層體現出來。用我自己的話來說,就是將代碼分工,分別寫在合適的位置。」
統一符號及名稱說明:
界面表示層:UIL (User Interface layer)
業務邏輯層:BLL(Business Logic Layer)
數據訪問層:DAL(Data access layer)
編譯環境:
Tool: Microsoft Visual Studio Enterprise 2017、SQL Server Management Studio (SSMS)
Language: C#
01
—
搭建框架
建立一個空白解決方案
Tips: 這樣做避免了建立項目時會糾結該選擇哪個對應的項目方案,需要多少個項目工程,直接在解決方案下添加即可。
為項目添加一個Web類庫(ASP.NET Web Application (.NET Framework)),命名為「TestULL」,模板選擇為Web Forms。再添加兩個Windows類庫(Class Library (.NET Framework))「TestBLL」和「TestDAL」。
Tips: 統一命名規則會在項目龐大、複雜起來顯得尤為重要,這裡我將對應的.cs文件名詞進行了修改
02
—
邏輯連接
在菜單欄Tools->NuGet Package Manager->Manage NuGet for Solution中刪除多餘的NuGet安裝包,對UIL層添加Newtonsoft.Json安裝包。
Tips: 在.js和.aspx等非.cs編譯文件中改變代碼,可以先保存再在網頁中按CTRL+F5來清空緩存刷新頁面,避免重複build。
猝不及防的知識點——代碼後置
新建一個aspx頁面的時候,會自動生成一個aspx.cs文件,aspx是一些前台的html的頁面和js的代碼我們叫做前台代碼,也叫做客戶端代碼。但是你的主要的邏輯代碼會在aspx.cs裡面,語法是C#,我們把這個叫做後台代碼,有時候也叫做服務端代碼。這樣使代碼與頁面內容分離,讓代碼更清晰。
與代碼後置相對應的是代碼內嵌,我們可以不使用代碼後置的.cs文件,完全在.aspx文件中編寫代碼。只需在創建頁面時,不選擇「將代碼放在單獨的文件中」複選框,將代碼寫在之間即可。
添加引用(References)規則:UIL引用BLL,BLL引用DAL。
03
—
頁面設計
在UIL層的.config文件中添加資料庫的登陸賬號和密碼,這樣便於後期統一修改和管理
TestUIL(Web.config)
打開UIL層的.asp文件,根據HTML編碼規則進行網頁編輯。這裡我們選用TextBox、Label、GridView三種基本控制項。其中,我們將Label的空間名稱改為LabelMatthew,隨著代碼量的增加,所有的控制項名稱都需要統一規範。
(WebForm1.aspx文件)
HELLO WORD!
該段代碼得到的頁面預期效果如圖所示:
猝不及防的知識點——B/S&C/S
C/S,即Client/Server(客戶機/伺服器) 結構,是大家熟知的軟體系統體系結構,通過將任務合理分配到Client端和Server端,降低了系統的通訊開銷,需要安裝客戶端才可進行管理操作。
B/S,即Browser/Server (瀏覽器/伺服器) 結構,是隨著Internet技術的興起,對C/S結構的一種變化或者改進的結構。在這種結構下,用戶界面完全通過WWW瀏覽器實現。
04
—
代碼添加
三層輸入的代碼如下:
BLL層(UserBLL.cs文件)
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TestDAL;
namespace TestBLL
{
public class UserBLL
{
public static void Add()
{
UserDal.Add();
}
public static DataTable Get()
{
DataTable dt = UserDal.Get();
dt.Rows.RemoveAt(0);
return dt;
}
}
}
DAL層(UserDAL.cs文件)
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestDAL
{
public class UserDAL
{
public class UserDal
{
public static void Add()
{
string SQL = "insert into users(UserName) values("hs" + DateTime.Now.Ticks + "");";
//string str = "Server=.; Database=TestDB;Uid=sa;Pwd=sa123;";
string str = ConfigurationManager.ConnectionStrings["myDB"].ConnectionString;
SqlConnection scn = new SqlConnection(str);
scn.Open();
SqlCommand sqlCommand = scn.CreateCommand();
sqlCommand.CommandText = SQL;
sqlCommand.ExecuteNonQuery();
scn.Close();
}
public static DataTable Get()
{
//string str = "Server=.; Database=TestDB;Uid=sa;Pwd=sa123;";
string str = ConfigurationManager.ConnectionStrings["myDB"].ConnectionString;
SqlConnection scn = new SqlConnection(str);
DataTable dt = new DataTable();
string selectSql = "select * from users";
scn.Open();
SqlDataAdapter sda = new SqlDataAdapter(selectSql, scn);
sda.Fill(dt);
scn.Close();
return dt;
}
}
}
UAI層(WebForm1.aspx.cs文件)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TestBLL;
namespace TestUIL
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Text = "hello";
LabelMatthew.Text = "byb";
UserBLL.Add();
GridView1.DataSource = UserBLL.Get();
GridView1.DataBind();
}
}
}
05
—
連接資料庫
本地資料庫登陸,輸入賬號及密碼,本地賬戶名稱默認為sa。
Tips: 本地資料庫登陸的四種方式
(1)自己的計算機名稱實例名;(2)本機的迴環地址;
(3)localhost ;(4)一個點:. 。
在本地資料庫中建立一個Test01庫,插入Roles、UserUserInRole、Users三個表,這裡只用到了Users這一個表,之後的教程會建立相對應的mapping關係來進行進一步學習。
06
—
測試
如果直接運行第一次會報錯,這需要進行ASP.NET MVC路由配置,簡單來說就是建立一個基礎頁,將Web程序運行在該基礎頁上。
具體操作方式有如下兩種:
(1)右擊WebForm1.aspx,點擊Set As Start Page;
(2)設置TestUIL的屬性。
詳情請參考博客:http://www.cnblogs.com/wangiqngpei557/p/3379095.html
為了直觀地與資料庫進行交互,我們在BLL層中為GridView控制項添加了DateTime方法,這樣每次刷新頁面都會向本地資料庫中添加一行數據。
string SQL = "insert into users(UserName) value
("hs"+DateTime.Now.Ticks + " ");";
本地資料庫的內容變化如下圖:
至此,你便搭建起了一個屬於你自己的三層架構項目。後續的文章,Matthew將會在此項目的基礎上進一步分享DevOps和雲端搭建的內容。
謹以此文與君共勉,略略略~
TAG:全球大搜羅 |