AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Idee Zur Synchronisation eines Interfaces mit Klasse (mit MMX?)
Thema durchsuchen
Ansicht
Themen-Optionen

Idee Zur Synchronisation eines Interfaces mit Klasse (mit MMX?)

Ein Thema von HeZa · begonnen am 24. Jul 2018 · letzter Beitrag vom 25. Jul 2018
 
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Idee Zur Synchronisation eines Interfaces mit Klasse (mit MMX?)

  Alt 24. Jul 2018, 15:10
Hallo

da Uwe ja mal nach Feature Vorschlägen zum MMX gefragt hat möchte ich jetzt gerne einen los werden:

Motivation
Die Synchronisation zwischen einem Interface und einer implementierenden Klasse ist irgendwie nervig und selbst dass was ich an Tool-Unterstützung gesehen (und verstanden habe?) überzeugt mich nicht.

Wie ich es mir vorstelle würde

Ein Beispiel mit einer Unit für das Interface und einer für die Klasse (wichtig sind die speziellen Kommentare).

Zuerst lege ich die Interface-Unit an:
Delphi-Quellcode:
unit DTO.Person.Intf;

interface

type
  IPerson = interface {!MMX: implemented by TPerson in DTO.Person.Impl}
  ['{1D826CBD-244A-4D1C-ADCC-C1AB8FAB36B2}']
  end;

implementation

end.
Dann die Klassen-Unit:
Delphi-Quellcode:
unit DTO.Person.Impl;

interface

uses
  DTO.Person.Intf;

function NewPerson: IPerson;

implementation

type
  TPerson = class(TInterfacedObject, {!MMX: implements in DTO.Person.Intf } IPerson )
  private
    FAge: Integer;
    procedure CheckData;
    function GetName: string;
    procedure SetAge(const Value: Integer);
    procedure SetName(const Value: string);
  public
    constructor Create;
    destructor Destroy; override;
    function YearOfBirth: integer;
    property Name: string read GetName write SetName;
    property Age: Integer read FAge write SetAge;
  end;

{ method implementation here ... }

end.
Befinde ich mich in der Interface oder Klassen Deklaration kann ich über einen Short Cut (z.B. Shift+Ctrl+I) eine Synchronisation auslösen.
Voraussetzung dafür wäre der jeweilige Kommentar mit dem MMX Start-Code {!MMX: ... }.

Dann wird die aktuelle Interface Methodenlist verworfen und aus der Klasse neu aufgebaut und zwar nach folgenden Regeln:
  • Nimm alle Methoden und Properties mit den Sichtbarkeiten Public, Publisched oder Auto.
  • Lasse alle Konstruktoren und Destruktoren weg.
  • Lasse alle Properties weg die sich bei read oder write auf ein Klassenfeld beziehen.
  • Referenziet ein Property bei read oder write eine Methode mit einer geringeren Sichtbarkeit übernehme auch diese.

Das Interface würde anschließend wir folg aussehen:
Delphi-Quellcode:
unit DTO.Person.Intf;

interface

type
  IPerson = interface {!MMX: implemented by TPerson in DTO.Person.Impl}
  ['{1D826CBD-244A-4D1C-ADCC-C1AB8FAB36B2}']
    function GetName: string;
    procedure SetName(const Value: string);
    function YearOfBirth: integer;
    property Name: string read GetName write SetName;
  end;

implementation

end.
Die Syntax für die Kommentarzeilen wäre
  • für das Interface (muss hinter dem Interface-Header stehen)
    {!MMX: implemented by <ClassType> [in <UnitName>] }
  • für die Klasse (muss vor dem zu implementierenden Interface stehen)
    {!MMX: implements [in <UnitName>] }

Was ist eure Meinung dazu (Vielleicht ist es ja auch einfach nur die Hitze )?

Ciao Heinz Z.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 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-2025 by Thomas Breitkreuz