Einzelnen Beitrag anzeigen

Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Objekteigenschaft übergeben?

  Alt 1. Dez 2009, 11:12
Also ich halte das für ziemlich unschön, besonders weil ich halt viel mit Patterns programmiere.

Ich poste hier einfach mal ein Pseudo-MVC Beispiel, welches ich hier schon angedeutet hatte:

Model und View:

Delphi-Quellcode:
Unit ModelView;

interface

type
  TObserver = class;

  TModel = class (TObject)
  public
    procedure Notify;
  end;

  TView = class (TObject)
  public
    procedure Update( Model: TModel); virtual; abstract;
  end;

implementation

uses
  Controller;

procedure TModel.Notify;
begin
  TController.Instance.Notify( Self );
end;
Observeritem:

Delphi-Quellcode:
unit Observeritem;

interface

uses
  ModelView;

type
  TObserverItem = class (TObject)
  private
    FModel: TModel;
    FView: TView;
  public
    property Model: TModel read FModel;
    property View: TView read FView;

    constructor Create(Model: TModel; View: TView);
  end;

implementation

constructor TObserverItem.Create(Model: TModel; View: TView);
begin
  FModel := Model;
  FView := View;
end;

end.
Observerlist:

Delphi-Quellcode:
unit ObserverList;

interface

uses
  ModelView,
  ObserverItem;

type
  TObserverList = class (TObjectlist)
  private
    function GetItems( Index: Integer): TObserverItem;
  public
    function Add( Model: TModel; View: TView): Integer;
    procedure Delete( Index: Integer);
    property Items[ Index: Integer]: TObserverItem read GetItems;
  end;

implementation

function TObserverList.Add( Model: TModel; View: TView): Integer;
begin
  Result := inherited Add( TObserverItem.Create( Model, View ) );
end;

procedure TObserverList.Delete( Index: Integer);
begin
  inherited Delete( Index );
end;

function TObserverList.GetItems( Index: Integer): TObserverItem;
begin
  Result := ( inherited Items[ Index ] ) as TObserverItem;
end;
Den Controller als Singleton kann ich gerade noch nicht posten, dafür fehlt mit atm die Zeit. Werde ich später nachholen, jedoch wird halt im Controller eine ObserverList verwaltet, wo jeweils die Models und Views bekannt gemacht werden. Bei einem Notify von einem Model würde er jedem View sagen das es ein Update ausführen soll und welches Model die Daten beinhaltet. Die Update-Methode des Views definiert man je nach Ansicht, indem man von der Basis-Klasse ableitet.

PS: Kann sein, dass hier noch was fehlt. Aber grundlegend sollte es das soweit sein bis auf den Controller. Schaue später nochmal über alles drüber.

MfG Alaitoc
  Mit Zitat antworten Zitat