Hallo.
Bei meinem verwendeten Code geht die Liste mit allen Submissions in 2 Filterfunktionen, die wiederum 2 Listen erstellen. Die Originalliste wird auch noch verwendet, nachdem sie in 2 Unterlisten aufgeteilt wurde.
Aber mal zu einem anderen Problem - Bei meiner Arbeit mit den TPersistent-Nachkommen und dem Assign()-Befehl habe ich wieder einen Nachteil entdeckt, der mir etwas zu wider ist:
Ich bin ja von den records+arrays weggegangen, da man einen record nicht ableiten kann. Es sei jetzt eine neue Klasse von TSubmission abgeleitet:
Delphi-Quellcode:
type
TExtendedSubmission = class(TSubmission)
public
Extension: string;
DateTime: string;
Author: string;
procedure Assign(Source: TPersistent); override;
end;
Dann werden alle Elemente von TSubmission mitgenommen. Das ist sehr gut. Aber bei der TExtendedSubmission.Assign() Methode geht das ganze ja wieder zu bruch.
Delphi-Quellcode:
{ TExtendedSubmission }
procedure TExtendedSubmission.Assign(Source: TPersistent);
begin
if Source is TExtendedSubmission then
begin
{ Hartcoding von TSubmission }
// TSubmission würde durch diesen Code zur Unveränderlichkeit gezwungen werden,
// da bei einer Veränderung alle Nachkommen ungültig werden würden
Tags := TExtendedSubmission(Source).Tags;
Rating := TExtendedSubmission(Source).Rating;
Score := TExtendedSubmission(Source).Score;
PictureNumber := TExtendedSubmission(Source).PictureNumber;
MD5 := TExtendedSubmission(Source).MD5;
{ Nun die neuen Methoden der eigenen Klasse }
Extension := TExtendedSubmission(Source).Extension;
DateTime := TExtendedSubmission(Source).DateTime;
Author := TExtendedSubmission(Source).Author;
end
else
inherited;
end;
In dieser Assign()-Methode MUSS ich alle Elemente der TSubmission (Tags, Rating, Score, PictureNumber und MD5) explizit in den Code mit einbinden. Und ich sehe keine Lösung dafür.
Nehmen wir mal an, ich würde TSubmission verändern/erweitern. TExtendedSubmission würde sich automatisch mit erweitern. Das ist der große Vorteil gegenüber den records, die ja leichter zu handhaben sind. Aber die Methode TExtendedSubmission.Assign() bleibt weiterhin unaktuell. Sie muss explizit angepasst werden, wenn ich TSubmission verändere. Allgemein müsste ich also ALLE Nachkommen in der Assign()-Methode separat umschreiben, wenn ich etwas am Grundtyp TSubmission ändere - sollte die
OOP das nicht irgendwie verhindern?
// Ich habe bezüglich der Problematik das Thema nochmal als offene Frage gesetzt.
Gruß
blackdrake