程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 查詢條件的封裝(一)

查詢條件的封裝(一)

編輯:Delphi

因為現行的項目是使用cxGrid作為主要的控件,通用的查詢條件模塊也是依賴cxGrid來實現的。但是現行的實現方式和設計思路的靈活性和維護性都比較差,存在每次改動代碼量較大、修改處多且分散的問題,所以我考慮重構一下,從設計上改變目前的方式。初步的想法是,cxGrid不動,通過一個UI類來控制cxGrid的顯示;設計一個條件項類和條件項列表類,用於程序員在設計器可視化設計查詢條件;最後有一個業務邏輯控制類,可以控制每一個查詢條件項,定義其獲取條件值的方式,通過這種設計將界面與邏輯分離。以前有前輩指點過,也有大牛強調過,界面、業務、數據必須分離,但是,我以為對於業務邏輯來講,它本身就是和數據緊密結合的,邏輯本身就依賴數據的不同而采取不同的分支,所以沒必要將數據和邏輯分得特別清楚,那樣的話,可能適得其反。當然,數據訪問層(DAL)是可以考慮分離出來的,便於擴展和平台移植。
由於是臨時起意,所以工作進度比較慢,目前僅初步寫了部分代碼,現記錄於此。
  查詢條件項
 
 1   TConditionItem = class(TCollectionItem)
 2   private
 3     FConditionName: string;
 4     FConditionLabel: string;
 5     FConditionValueType: TConditionItemDataType;
 6     FConditionEditType: TConditionEditType;
 7     FConditionValue: Variant;
 8     procedure SetConditionEditType(const Value: TConditionEditType);
 9     procedure SetConditionLabel(const Value: string);
10     procedure SetConditionName(const Value: string);
11     procedure SetConditionValueType(const Value: TConditionItemDataType);
12     procedure SetConditionValue(const Value: Variant);
13   protected
14     procedure SetIndex(Value: Integer); override;
15   public
16     constructor Create(Collection: TCollection); override;
17     procedure Assign(Source: TPersistent); override;
18     property ConditionValue : Variant read FConditionValue write SetConditionValue;
19   published
20     property ConditionName : string read FConditionName write SetConditionName;
21     property ConditionLabel : string read FConditionLabel write SetConditionLabel;
22     property ConditionEditType : TConditionEditType read FConditionEditType write SetConditionEditType;
23     property ConditionValueType : TConditionItemDataType read FConditionValueType write SetConditionValueType;
24   end;
 
  查詢條件項列表
 
 1   TConditionItems = class(TCollection)
 2   private
 3     FConditionUI: TConditionUI;
 4     function GetItems(Index: Integer): TConditionItem;
 5     procedure SetItems(Index: Integer; const Value: TConditionItem);
 6   protected
 7     function GetOwner: TPersistent; override;
 8     procedure Update(Item: TCollectionItem); override;
 9     // TCollection遍歷時是按照ID來進行的,也就是List中的存儲位置進行。實際上,我們需要的是按照我們自己的排列順序。
10     function FindItemIndex(index: Integer): TConditionItem;
11     function FindItemName(AConditionName : string) : TConditionItem;
12   public
13     constructor Create(AConditionUI: TConditionUI; ItemClass: TItemClass);
14     function  Add: TConditionItem;
15     property Items[Index: Integer]: TConditionItem read GetItems write SetItems;
16   end;
 
  查詢條件表格顯示控制類
 
 1   TConditionUI = class(TComponent)
 2   private
 3     FConditionGrid: TcxGridTableView;
 4     FConditionItems: TConditionItems;
 5     FSelectedStyle: TcxStyle;
 6     FNormalStyle: TcxStyle;
 7     procedure SetConditionGrid(const Value: TcxGridTableView);
 8     procedure SetConditionItems(const Value: TConditionItems);
 9     procedure SetNormalStyle(const Value: TcxStyle);
10     procedure SetSelectedStyle(const Value: TcxStyle);
11     { Private declarations }
12   protected
13     { Protected declarations }
14     function CreateConditionItems : TConditionItems; dynamic;
15     procedure BuildConditionGridByItems; virtual;
16     procedure CustomDrawIndicatorCell(
17       Sender: TcxGridTableView; ACanvas: TcxCanvas;
18       AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
19   public
20     { Public declarations }
21     constructor Create(AOwner : TComponent); override;
22     destructor Destroy; override;
23     function GetConditionValue(AConditionName : string) : Variant; // 根據條件名稱獲取條件值s
24   published
25     { Published declarations }
26      property ConditionGrid :  TcxGridTableView read FConditionGrid write SetConditionGrid;
27      property ConditionItems : TConditionItems read FConditionItems write SetConditionItems;
28      property SelectedStyle : TcxStyle read FSelectedStyle write SetSelectedStyle;
29      property NormalStyle : TcxStyle read FNormalStyle write SetNormalStyle;
30   end;
 
  數據類型定義
 
 1 {本單元用於定義基本的數據類型}
 2
 3 unit ConditionConst;
 4
 5 interface
 6
 7 type
 8   // 查詢條件項的編輯模式
 9   TConditionEditType = (cetEdit, cetButtonEdit, cetDatePicker, cetComboBox);
10
11   // 查詢條件項的值的數據類型
12   TConditionItemDataType = (cidtString, cidtInt, cidtFloat, cidtDouble,
13     cidtDate, cidtDateTime, cidtBool);
14
15 implementation
16
17 end.
 


摘自 編碼筆記

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved