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

C# 統一獲取設置 UI 控件值(四):Controller 模式解耦邏輯與視圖

     編輯:關於C語言

核心思想

利用反射與約定優於配置,實現實體對象與 UI 控件雙向綁定,進而將驗證、業務邏輯封裝於 Controller 類,實現 UI 與後台邏輯解耦。

Controller 示例


class Controller
{
    private readonly Form _view;
    private readonly User _user = new User();

    public Controller(Form view) => _view = view;

    // 從 UI 收集數據到實體
    public bool IsValidated()
    {
        ControlHelper.GetControlsValues(_view, _user); // 反射賦值
        return !string.IsNullOrEmpty(_user.Name) && !string.IsNullOrEmpty(_user.Pwd);
    }

    // 業務邏輯
    public bool Login()
    {
        if (!IsValidated()) return false;
        return AuthService.Login(_user.Name, _user.Pwd);
    }

    // 將結果回填 UI
    public void ShowResult(bool success)
    {
        ControlHelper.SetControlValue(_view, "lblMsg", success ? "登錄成功" : "失敗");
    }
}

使用方式


// Form 中
private Controller _ctrl;
public Form1()
{
    InitializeComponent();
    _ctrl = new Controller(this);
}

private void BtnLogin_Click(object sender, EventArgs e)
{
    if (_ctrl.Login()) _ctrl.ShowResult(true);
    else _ctrl.ShowResult(false);
}

擴展:統一樣式與清空操作


// 為所有 TextBox 設置紅色邊框
ControlHelper.ApplyStyle(_view, c => c is TextBox, c => ((TextBox)c).BorderStyle = BorderStyle.FixedSingle);

// 清空所有 TextBox
ControlHelper.ClearControls(_view, c => c is TextBox);

優勢總結

  • 單一職責:UI 僅負責顯示,Controller 負責邏輯。
  • 可測試性:Controller 可單元測試,無需啟動 UI。
  • 復用性:同一 Controller 可服務 WinForm、WPF、Web(需適配 IControl)。
  • 約定優於配置:控件命名規則(如 txtName 對應 Name)消除大量樣板代碼。

系列總結

  1. 約定命名規則 + 反射雙向綁定基礎。
  2. 統一 WinForm/WebForm 控件訪問接口 IControl。
  3. 通用輔助類 ControlHelper 實現獲取/設置/驗證/樣式/清空。
  4. Controller 模式落地,實現邏輯與視圖分離。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved