de67a00e75
1. Tag를 활용한 리펙토링 2. Interface를 활용한 DataSet State 분리
81 lines
2.0 KiB
ObjectPascal
81 lines
2.0 KiB
ObjectPascal
unit DataUnit;
|
|
|
|
interface
|
|
|
|
uses
|
|
{ Delphi }
|
|
System.SysUtils, System.Classes, Data.DB, dxmdaset, System.ImageList,
|
|
Vcl.ImgList, Vcl.Controls, cxImageList, cxGraphics,
|
|
{ Constom }
|
|
Employee.Model;
|
|
|
|
type
|
|
/// <summary>MainUnit에서 DataSet State를 사용하기 위해 인터페이스로 전달</summary>
|
|
IDataStateNotifier = interface
|
|
procedure NotifyDataSetStateChange(const AState: TDataSetState);
|
|
end;
|
|
|
|
TdmData = class(TDataModule)
|
|
mdEmployee: TdxMemData;
|
|
mdEmployeename: TStringField;
|
|
mdEmployeeage: TSmallintField;
|
|
mdEmployeeposition: TStringField;
|
|
mdEmployeesalary: TIntegerField;
|
|
mdEmployeeaddress: TStringField;
|
|
dsEmployee: TDataSource;
|
|
ilSmallIcons: TcxImageList;
|
|
procedure dsEmployeeStateChange(Sender: TObject);
|
|
procedure DataModuleCreate(Sender: TObject);
|
|
private
|
|
FNotifier: IDataStateNotifier;
|
|
public
|
|
procedure SetNotifier(ANotifier: IDataStateNotifier);
|
|
/// <summary>Employee 전체 데이타 반환</summary>
|
|
/// <returns>TArray<TEmployee> TEmployee 레코드를 배열로 반환</returns>
|
|
/// <remarks>예제함수</remarks>
|
|
function GetAllEmployee: TArray<TEmployee>;
|
|
end;
|
|
|
|
var
|
|
dmData: TdmData;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
procedure TdmData.DataModuleCreate(Sender: TObject);
|
|
begin
|
|
mdEmployee.Active:= True;
|
|
end;
|
|
|
|
procedure TdmData.dsEmployeeStateChange(Sender: TObject);
|
|
begin
|
|
// DataSet 상태가 변할때 NotifyDataSetStateChange 메소드로 전달
|
|
if Assigned(FNotifier) then
|
|
FNotifier.NotifyDataSetStateChange(dsEmployee.DataSet.State);
|
|
end;
|
|
|
|
procedure TdmData.SetNotifier(ANotifier: IDataStateNotifier);
|
|
begin
|
|
FNotifier:= ANotifier;
|
|
end;
|
|
|
|
function TdmData.GetAllEmployee: TArray<TEmployee>;
|
|
begin
|
|
var Employees: TArray<TEmployee>;
|
|
var i:= 0;
|
|
|
|
SetLength(Employees, mdEmployee.RecordCount);
|
|
mdEmployee.First;
|
|
|
|
while Not mdEmployee.EOF do
|
|
begin
|
|
Employees[i].Name:= mdEmployee.FieldByName('Name').AsString;
|
|
Inc(i);
|
|
mdEmployee.Next;
|
|
end;
|
|
|
|
result:= Employees;
|
|
end;
|
|
end.
|