首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 三層式架構實戰:新增員工完整範例

     編輯:ASP.NET 基礎

架構分層

層級專案/命名空間職責關鍵類別
表示層Maticsoft.Web頁面呈現、使用者互動、輸入驗證MYAdd.aspx / MYAdd.aspx.cs
業務邏輯層Maticsoft.BLL業務規則、流程控制、交易協調EmployeesBLL
資料存取層Maticsoft.DALSQL 執行、參數化、連線管理EmployeesDAL
實體模型Maticsoft.Model資料傳輸物件 (DTO)EmployeesInfo

實體模型

namespace Maticsoft.Model
{
    public class EmployeesInfo
    {
        public int EmployeeID { get; set; }
        public string EmployeesName { get; set; }
        // 其他欄位...
    }
}

資料存取層

namespace Maticsoft.DAL
{
    public class EmployeesDAL
    {
        public bool Add(EmployeesInfo model)
        {
            StringBuilder sql = new StringBuilder();
            sql.Append("INSERT INTO Employees (EmployeeID, EmployeesName) VALUES (@EmployeeID, @EmployeesName)");

            SqlParameter[] paras =
            {
                new SqlParameter("@EmployeeID", SqlDbType.Int) { Value = model.EmployeeID },
                new SqlParameter("@EmployeesName", SqlDbType.VarChar, 90) { Value = model.EmployeesName }
            };

            return DbHelperSQL.ExecuteSql(sql.ToString(), paras) > 0;
        }
    }
}

業務邏輯層

namespace Maticsoft.BLL
{
    public class EmployeesBLL
    {
        private readonly EmployeesDAL _dal = new EmployeesDAL();

        public bool Add(EmployeesInfo model)
        {
            // 這裡可加入業務規則:唯一性檢查、權限驗證、寫入日誌、發送通知等
            return _dal.Add(model);
        }
    }
}

表示層:新增頁面

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MYAdd.aspx.cs" Inherits="Maticsoft.Web.Employees.MYAdd" %>
<form id="form1" runat="server">
    員工編號:<asp:TextBox ID="txtEmpID" runat="server" />
    <asp:RequiredFieldValidator ControlToValidate="txtEmpID" ErrorMessage="編號必填" runat="server" />
    <asp:RegularExpressionValidator ControlToValidate="txtEmpID" ValidationExpression="^\d+$" ErrorMessage="需為數字" runat="server" />
員工姓名:<asp:TextBox ID="txtEmpName" runat="server" /> <asp:RequiredFieldValidator ControlToValidate="txtEmpName" ErrorMessage="姓名必填" runat="server" />
<asp:Button ID="btnSave" runat="server" Text="儲存" OnClick="btnSave_Click" /> <asp:Button ID="btnCancel" runat="server" Text="返回" OnClick="btnCancel_Click" /> </form>

表示層:代碼後置

namespace Maticsoft.Web.Employees
{
    public partial class MYAdd : Page
    {
        private readonly EmployeesBLL _bll = new EmployeesBLL();

        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;

            var model = new EmployeesInfo
            {
                EmployeeID = int.Parse(txtEmpID.Text),
                EmployeesName = txtEmpName.Text.Trim()
            };

            if (_bll.Add(model))
            {
                MessageBox.ShowAndRedirect(this, "儲存成功!", "MYAdd.aspx");
            }
            else
            {
                MessageBox.Show(this, "儲存失敗,請稍後再試。");
            }
        }

        protected void btnCancel_Click(object sender, EventArgs e)
        {
            Response.Redirect("List.aspx");
        }
    }
}

分層優勢

  • 關注點分離:UI 不含 SQL,DAL 不含業務規則,易於單元測試與替換實作。
  • 複用性:BLL 可被 Web、WebAPI、Windows Service、Console 共同呼叫。
  • 維護性:修改資料庫結構只需動 DAL;修改業務流程只動 BLL。
  • 團隊協作:前端/後端/DBA 可平行開發,介面由 Model 定義。

進階擴充

  • 導入 **Repository Pattern + Unit of Work** 統一交易控制。
  • 使用 **AutoMapper** 實現 Model ↔ ViewModel 映射。
  • 採用 **Dependency Injection** (Autofac/內建 DI) 解耦 BLL 對 DAL 的具體依賴。
  • 加入 **快取層** (Redis/MemoryCache) 於 BLL 降低資料庫壓力。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved