Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Klasse für Zeitraum erstellen

  Alt 5. Jan 2012, 13:11
Ich würde das ganz banal angehen. Eine Klasse mit 2 Properties "FromDateTime" und "ToDateTime", und einer Sammlung an Methoden. Alternativ eine Klasse mit 3 Datums-Properties und Read-Only Properties, die auf entsprechende Getter verweisen. Die verschiedenen Methoden/Getter ließen sich auch noch durch einen Enum ersetzen, und einer generellen "GetRange"-Methode.

Delphi-Quellcode:
type
  TDateTimeRange = class(TObject)
  private
    FFromTime, FToTime: TDateTime;
  public
    property FromTime: TDateTime read FFromTime;
    property ToTime: TDateTime read FToTime;
    function GetYearRange(relativeTo: TDateTime): TDateTimeRange;
    function GetMonthRange(relativeTo: TDateTime): TDateTimeRange;
    function GetDayRange(relativeTo: TDateTime): TDateTimeRange;
    // etc.
  end;

// oder

  TDateTimeRange = class(TObject)
  private
    FFromTime, FToTime, FRelativeTime: TDateTime;
    function GetYearRange: TDateTimeRange;
    function GetMonthRange: TDateTimeRange;
    function GetDayRange: TDateTimeRange;
  public
    constructor Create(aRelativeTime: TDateTime);
    property FromTime: TDateTime read FFromTime;
    property ToTime: TDateTime read FToTime;
    property RelativeTime: TDateTime read FRelativeTime write FRelativeTime;
    property YearRange: TDateTimeRange read GetYearRange;
    property MonthRange: TDateTimeRange read GetMonthRange;
    property DateRange: TDateTimeRange read GetDateRange;
    // etc.
  end;

// ooooder:

  TDateTimeRangeMode = (dtrmYear, dtrmMonth, dtrmDay);

  TDateTimeRange = class(TObject)
  private
    FFromTime, FToTime, FRelativeTime: TDateTime;
    FRangeMode: TDateTimeRangeMode;
    function GetRange: TDateTimeRange;
  public
    constructor Create(aRelativeTime: TDateTime; aRangeMode: TDateTimeRangeMode);
    property FromTime: TDateTime read FFromTime;
    property ToTime: TDateTime read FToTime;
    property RelativeTime: TDateTime read FRelativeTime write FRelativeTime;
    property Range: TDateTimeRange read GetRange;
  end;
Darin ließe sich auch noch statisch eine Factory einbauen, die etwas wie TDateTimeRange.CreateNewRange(aRelativeTime: TDateTime; aRangeMode: TDateTimeRangeMode): TDateTimeRange; bietet, wodurch sich das Problem etwas mildert, dass solche Konstrukte wie oben in nicht-GC Umgebungen ggf. doof zu handhaben sind.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat