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