![]() |
AW: Methoden-Deklaration vorgeben?
Zitat:
![]() Edit: Ich darf DRY nicht großschreiben. :-/ Edit2: ... oder nur, wenn ich ganze Sätze formuliere. :oops: |
AW: Methoden-Deklaration vorgeben?
Das kann man auch schön so umsetzen
Delphi-Quellcode:
Jetzt für jeden konkreten Befehl so eine Klasse erstellen und die jeweilige Instanz in einem
IMyMethod = interface
procedure Execute( input1: Integer; input2: TSomeClass; out output: Double ); end; // Eine Dummy-Klasse zum Veranschaulichen TMyDummyMethod = class( TInterfacedObject, IMyMethod ) protected procedure Execute( input1: Integer; input2: TSomeClass; out output: Double ); end; procedure TMyMethod.Execute( input1: Integer; input2: TSomeClass; out output: Double ); begin output := 0; end;
Delphi-Quellcode:
verwalten
TDictionary<string,IMyMethod>
Der Aufruf gestaltet sich ja dann sehr smart
Delphi-Quellcode:
Man kann das auch mit einem
type
TPacketHandler = class private fMethodDict : TDictionary<string,IMyMethod>; public procedure Execute( const ACommandStr : string; input1: Integer; input2: TSomeClass; out output: Double ); procedure AddMethod( const ACommandStr : string; AMethod : IMyMethod ); end; procedure TPacketHandler.Execute( const ACommandStr : string; input1: Integer; input2: TSomeClass; out output: Double ); begin fMethodDict[ACommandStr].Execute( input1, input2, output ); end; procedure TPacketHandler.AddMethod( const ACommandStr : string; AMethod : IMyMethod ); begin fMethodDict.AddOrSet( ACommandStr, AMethod ); end; ![]() |
AW: Methoden-Deklaration vorgeben?
Zitat:
|
AW: Methoden-Deklaration vorgeben?
Zitat:
|
AW: Methoden-Deklaration vorgeben?
Zitat:
|
AW: Methoden-Deklaration vorgeben?
Zitat:
|
AW: Methoden-Deklaration vorgeben?
Zitat:
Mit Makros à la C++ würde es funktionieren:
Code:
Am schönsten fände ich es, wenn man einen vordefinierten Funktions-/Methodentyp bei der Deklaration benutzen könnte.
#define DECLARE_HANDLER_PROC(NAME) procedure NAME(input1: Integer; input2: TSomeClass; out output: Double)
DECLARE_HANDLER_PROC(proc1); DECLARE_HANDLER_PROC(proc2); DECLARE_HANDLER_PROC(proc3); DECLARE_HANDLER_PROC(proc4); DECLARE_HANDLER_PROC(proc5); Das habe ich aber noch in keiner Sprache gesehen. |
AW: Methoden-Deklaration vorgeben?
Zitat:
Also: Mach es wie Sir Rufo vorgeschlagen hat: Nimm eine Factory. |
AW: Methoden-Deklaration vorgeben?
Zitat:
"Wie teile ich Methoden auf Klassen auf." => Factories, usw. sondern: "Wie vermeide ich es, tausendmal (auch in verschiedenen Klassen) die gleiche Signatur zu tippen.". Gerade bei ![]() Oder übersehe ich da etwas? BTW: Meine "Lieblingslösung" wurde ja schon im Ausgangspost genannt :oops: |
AW: Methoden-Deklaration vorgeben?
@Sir Rufo, Furtbichler: Ändert allerdings auch nichts daran, dass man die Parameterdeklaration bei jeder Methode wieder hinschreiben muss.
Wenn dann würde sich vielleicht eher dieses Pattern anbieten, wo man statt die Parameter einzeln zu übergeben, ein einziges Objekt übergibt, das alle Parameter beinhaltet... mit Namen hab ichs nicht so :-D. So spielt die dann Reihenfolge keine Rolle und man kann auch neue Parameter hinzufügen, ohne alle Methoden anpassen zu müssen. Also statt:
Delphi-Quellcode:
TMyDummyMethod = class
protected procedure Execute( input1: Integer; input2: TSomeClass; out output: Double ); end; procedure TPacketHandler.Execute( const ACommandStr : string; input1: Integer; input2: TSomeClass; out output: Double ); begin fMethodDict[ACommandStr].Execute( input1, input2, output ); end;
Delphi-Quellcode:
(jaja public Felder sind pöhse usw., ist nur qualitativ).
TMyMethodParameters = class
input1: Integer; input2: TSomeClass; output: Double; end; TMyDummyMethod = class protected procedure Execute(parameters: TMyMethodParameters); end; procedure TPacketHandler.Execute( const ACommandStr : string; input1: Integer; input2: TSomeClass; out output: Double ); var Parameters: TMyMethodParameters; begin Parameters:= TMyMethodParameters.Create(input2, input2, output); fMethodDict[ACommandStr].Execute(Arguments); Parameters.Free; end; Aber KISS. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz