ASP.NET C# 中面向初学者的三层架构






4.11/5 (6投票s)
用三层架构代码风格开发 Web 应用程序
引言
本技巧简要概述了以三层架构编程风格开发 Web 应用程序。三层架构分为以下 3 个部分。
背景
DataAccessLayer
:这也被称为应用程序的 DAL 层,提供所有数据库相关操作的性能,如插入记录、删除记录、编辑记录和更新记录。此层提供从数据库访问数据。数据集从 DAL 层传递到业务层。BusinessLogicLayer
:此层提供如何在 Web 应用程序中添加与业务相关的逻辑。与业务相关的逻辑包含循环结构(for
、while
等)的逻辑,这些逻辑在一个类文件中执行所有项目逻辑。BL 层获取由 DAL 层返回的Dataset
,然后将其转换为该特定文件的等效 List (li
) 对象。PresentationLayer
:此层在客户端提供设计,并获取从业务层返回的 List,然后实现您要执行的显示功能、插入功能、编辑功能等。在下面的图像中,显示了这三层。
Using the Code
- 为了使应用程序更容易理解。
- 易于维护,易于修改应用程序,我们可以保持良好的架构外观。
使用三层架构开发风格,您的 Web 应用程序扩展将易于实现新的更改。在三层中,开发应用程序需要以下类文件。下面的快照显示了您必须在应用程序中添加的所有三个文件。
步骤 1
添加连接文件以创建与 SQL 数据库的连接。文件名是 ClassMain.cs。
声明两个命名空间
Using system.data;
Using system,data.sqlclient;
Class_Main.CS
SqlConnection cn = new SqlConnection(@"Data Source=JATINKHIMANI-PC\JATINKHIMANI;
Initial Catalog=mydatabase;Integrated Security=True");
// SqlConnection cn = new SqlConnection(@"Data Source=JTINKHIMANI-PC\SQLEXPRESS;
Initial Catalog=SaffronyFeedback;Integrated Security=True");
public Class_Main()
{
//
// TODO: Add constructor logic here
//
}
#region QueryFunctions
public void insert(string que)
{
cn.Open();
SqlCommand cmd = new SqlCommand(que,cn);
cmd.ExecuteNonQuery();
cmd.Dispose();
cn.Close();
}
public void delete(string que)
{
cn.Open();
SqlCommand cmd = new SqlCommand(que, cn);
cmd.ExecuteNonQuery();
cmd.Dispose();
cn.Close();
}
public void update(string que)
{
cn.Open();
SqlCommand cmd = new SqlCommand(que, cn);
cmd.ExecuteNonQuery();
cmd.Dispose();
cn.Close();
}
public DataSet select(string que)
{
SqlDataAdapter ad = new SqlDataAdapter(que,cn);
DataSet ds = new DataSet();
ad.Fill(ds);
return ds;
}
#endregion
第二步
添加另一个文件,用于从连接文件访问数据。这用于执行与数据库相关的功能,如插入、更新、删除和选择。
DL_Marksheet.cs
public DL_Marksheet()
{
//
// TODO: Add constructor logic here
//
}
// Made Function and pass BL's Object (blm).........................
public static void MarksheetInsert(BL_Marksheet blm)
{
// Call ClassFile .......................
Class_Main cm = new Class_Main();
cm.insert("insert into marksheet(rollno,name,maths,science,english) values
("+blm.Rollno+",'"+blm.Name+"',
"+blm.Maths+","+blm.Science+","+blm.English+")");
}
public static DataSet MarksheetSelect()
{
Class_Main cm = new Class_Main();
DataSet ds = cm.select("select * from marksheet");
return ds;
}
public static DataSet MarksheetSelect(string rollno)
{
Class_Main cm = new Class_Main();
DataSet ds = cm.select("select * from marksheet where rollno="+rollno+"");
return ds;
}
public static void MarksheetDelete(string rollno)
{
Class_Main cm = new Class_Main();
cm.delete("delete from marksheet where rollno=" + rollno + "");
}
步骤 3
在此处添加与业务相关的逻辑,用于从数据库显示记录,将 dataset
转换为有效对象的 List,然后将该列表传递给表示层以显示记录。
BL_Marksheet.cs
private int rollno;
private string name;
private int maths;
private int science;
private int english;
public BL_Marksheet()
{
//
// TODO: Add constructor logic here
//
}
// Create All Fields Property as shown below.................
public int Rollno
{
get
{
return rollno;
}
set
{
this.rollno = value;
}
}
public string Name
{
get
{
return name;
}
set
{
this.name = value;
}
}
public int Maths
{
get
{
return maths;
}
set
{
this.maths = value;
}
}
public int Science
{
get
{
return science;
}
set
{
this.science = value;
}
}
public int English
{
get
{
return english;
}
set
{
this.english = value;
}
}
// Made function for Insert Data..................
public static void MarksheetInsert(BL_Marksheet blm)
{
// Call DL's Insert function and Pass Bl's Object (blm)........................
DL_Marksheet.MarksheetInsert(blm);
}
public static List<BL_Marksheet> MarksheetSelect()
{
// create LIST object li that is ........
List<BL_Marksheet> li = new List<BL_Marksheet>();
Class_Main cm = new Class_Main();
// put DL's dataset into ds..........
DataSet ds = DL_Marksheet.MarksheetSelect();
for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
BL_Marksheet blm = new BL_Marksheet();
DataRow dr = ds.Tables[0].Rows[i];
blm.Rollno = int.Parse(dr["rollno"].ToString());
blm.Name = dr["name"].ToString();
blm.Maths = int.Parse(dr["maths"].ToString());
blm.Science = int.Parse(dr["science"].ToString());
blm.English = int.Parse(dr["english"].ToString());
// Another Way..............
//blm.Rollno = int.Parse(ds.Tables[0].Rows[i]["rollno"].ToString());
//blm.Name =ds.Tables[0].Rows[i]["name"].ToString();
//blm.Maths = int.Parse(ds.Tables[0].Rows[i]["maths"].ToString());
//blm.Science = int.Parse(ds.Tables[0].Rows[i]["science"].ToString());
//blm.English = int.Parse(ds.Tables[0].Rows[i]["english"].ToString());
// ADd BL's object (blm) to List (li)..................
li.Add(blm);
}
// Return List (li) to Presentation Page.......
return li;
}
public static List<BL_Marksheet> MarksheetSelect(string rollno)
{
List<BL_Marksheet> li = new List<BL_Marksheet>();
Class_Main cm = new Class_Main();
DataSet ds=DL_Marksheet.MarksheetSelect(rollno);
for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
BL_Marksheet blm = new BL_Marksheet();
blm.Rollno = int.Parse(ds.Tables[0].Rows[i]["rollno"].ToString());
blm.Name = ds.Tables[0].Rows[i]["name"].ToString();
blm.Maths = int.Parse(ds.Tables[0].Rows[i]["maths"].ToString());
blm.Science = int.Parse(ds.Tables[0].Rows[i]["science"].ToString());
blm.English = int.Parse(ds.Tables[0].Rows[i]["english"].ToString());
li.Add(blm);
}
return li;
}
public static void MarksheetDelete(string rollno)
{
DL_Marksheet.MarksheetDelete(rollno);
}
步骤 4
编写代码,用于在表示文件中添加记录,以设计插入记录的表单。
<table align="center" border="1" cellpadding="4" cellspacing="1">
<tr>
<td align="justify">
<asp:Label ID="Label1" runat="server" Text="RollNo"></asp:Label>
</td>
<td align="justify">
<asp:TextBox ID="txtrollno" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td align="justify">
<asp:Label ID="Label2" runat="server" Text="Name"></asp:Label>
</td>
<td align="justify">
<asp:TextBox ID="txtname" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td align="justify">
<asp:Label ID="Label3" runat="server" Text="MAths"></asp:Label>
</td>
<td align="justify">
<asp:TextBox ID="txtmaths" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td align="justify">
<asp:Label ID="Label4" runat="server" Text="Science"></asp:Label>
</td>
<td align="justify">
<asp:TextBox ID="txtscience" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td align="justify">
<asp:Label ID="Label5" runat="server" Text="English"></asp:Label>
</td>
<td align="justify">
<asp:TextBox ID="txtenglish" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td align="justify" colspan="2">
<asp:Button ID="btnsubmit" runat="server" onclick="btnsubmit_Click"
Text="SUBMIT" Width="100px" />
</td>
</tr>
<tr>
<td align="justify" colspan="2">
<asp:GridView ID="gridmarksheet" runat="server" AutoGenerateColumns="False"
BackColor="White" BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px"
CellPadding="4" ForeColor="Black" GridLines="Vertical">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:BoundField DataField="rollno" HeaderText="RollNo" />
<asp:BoundField DataField="name" HeaderText="Name" />
<asp:BoundField DataField="maths" HeaderText="Maths" />
<asp:BoundField DataField="science" HeaderText="Science" />
<asp:BoundField DataField="english" HeaderText="English" />
</Columns>
<FooterStyle BackColor="#CCCC99" />
<HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
<RowStyle BackColor="#F7F7DE" />
<SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#FBFBF2" />
<SortedAscendingHeaderStyle BackColor="#848384" />
<SortedDescendingCellStyle BackColor="#EAEAD3" />
<SortedDescendingHeaderStyle BackColor="#575357" />
</asp:GridView>
</td>
</tr>
</table>
步骤 5
将以下 cs 代码添加到表示文件 .cs 表单中。在这里,我运行了插入和显示记录数据,如果您想编辑和删除该显示数据,只需调用我已经写入 BLMarksheet.CS 文件中的函数。
Class_Main cm = new Class_Main();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DisplayData();
}
}
public void DisplayData()
{
List<BL_Marksheet> li = new List<BL_Marksheet>();
li = BL_Marksheet.MarksheetSelect();
gridmarksheet.DataSource = li;
gridmarksheet.DataBind();
}
protected void btnsubmit_Click(object sender, EventArgs e)
{
try
{
// CALL Bussiness Layer(BL)
BL_Marksheet blm = new BL_Marksheet();
// Passing Values To BL
blm.Rollno = int.Parse(txtrollno.Text);
blm.Name = txtname.Text;
blm.Maths = int.Parse(txtmaths.Text);
blm.Science = int.Parse(txtscience.Text);
blm.English = int.Parse(txtenglish.Text);
// CAll (DL)Data Layer's insert function and PAss BL Object (blm)
DL_Marksheet.MarksheetInsert(blm);
DisplayData();
Response.Write("<script>alert('Record Inserted...')</script>");
Clear();
}
catch (Exception)
{
Response.Write("<script>alert('Try Again...')</script>");
Clear();
}
}
public void Clear()
{
txtrollno.Text = "";
txtname.Text = "";
txtmaths.Text = "";
txtscience.Text = "";
txtenglish.Text = "";
txtrollno.Focus();
}
我已对上述代码进行了更改,如果您想查看,请下载我上传的演示代码。
关注点
在许多文章中,有许多其他类型的 3 层代码风格可用,但我认为它非常有效,并且包含最少的代码来实现 3 层架构。这对于不熟悉 ASP.NET 中新代码风格的初学者来说非常有用。许多新开发人员都在努力开发它,所以我已经完成了并发布了它供所有人使用。
历史
- 2015 年 1 月 19 日:第一个版本
谢谢!
Jatin Khimani