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

自訂「TB_定位存取」基類:封裝資料定位與後續處理的通用模式

     編輯:關於ASP.NET

問題背景:重複的資料定位邏輯

在企業應用中,頻繁需要「依特徵值(助記碼、編號、名稱)從大量資料中定位目標記錄,再執行後續動作(顯示、修改、同步、複製)」。此模式高度重複,卻因應用場景多變(資料來源、比對方式、速度需求、結果基數、後續處理)難以封裝。

需求維度分析

這些維度非獨立,常以組合形式出現,故不可過度細粒度封裝,需設計一個可擴充的基類,配合「自訂屬性」適應各種組合。

兩層繼承架構設計

  1. TB_定位存取(基類):核心責任——「依特徵值定位到目標記錄」。提供可覆寫的虛擬方法:
    • GetSearchExpression():建構邏輯條件(支援多種比對模式)。
    • OnRecordFound():找到單筆時的預設處理(如設為 Current)。
    • OnMultipleFound():多筆時彈出選擇視窗。
    • OnNotFound():無資料時的預設行為(如清空畫面、提示)。
  2. TB_定位插入(衍生類):繼承定位能力,並在OnRecordFound後增加「將資料寫入另一資料集/複製到新記錄」等後續處理邏輯。

關鍵設計決策

  • 策略模式注入比對邏輯:將「左比對/精確/模糊」封裝為 ISearchStrategy 介面,基類持有策略實例,屬性視窗可切換。
  • 非同步回呼支援:定位耗時操作(如遠端查詢)採 BeginSearch/EndSearch 模式,避免 UI 凍結。
  • 資料來源抽象:定義 IDataProvider 介面(Find(expression), GetAll()),實作類分別對應 DataTable、DataGridView、Web Service、Entity Framework 等。
  • 事件驅動擴充點:公開 BeforeSearch, AfterSearch, RecordSelected 事件,讓使用者控制項訂閱而不需繼承。

使用範例:超市收銀掃碼

// 設定屬性(設計時或執行時)
locator.DataProvider = new BarcodeDbProvider();      // 資料來源
locator.SearchStrategy = new ExactMatchStrategy();   // 精確比對條碼
locator.SearchField = "Barcode";                     // 特徵值欄位
locator.OnRecordFound += (s, e) => {
    posScreen.AddLineItem(e.FoundRecord);            // 直接加入明細
};
locator.OnNotFound += (s, e) => {
    MessageBox.Show("查無商品,請人工輸入");
};

// 運行時:掃描槍輸入條碼 → 自動觸發定位 → 觸發對應事件
locator.Locate(scannedBarcode);

總結

「TB_定位存取」將「定位」這一核心動作標準化、組件化,透過策略注入、事件擴充、資料來源抽象,以單一基類支援上述五大維度的任意組合,消除大量重複程式碼,並為「定位插入」等進階功能奠定堅實基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
維度變化點
特徵值與搜尋方式助記碼/編號/名稱;左比對/精確/模糊
關注焦點回應速度(POS 收銀);比對範圍與模式(模糊查詢)
搜尋結果可能性無資料/單筆/多筆(需再選擇)
定位目的指標定位/刷新畫面控制項/同步關聯資料集/複製至另一資料集
資料來源型別本地 DataTable / DataGridView / 遠端資料庫