AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Code-Kata: Cache-Klasse. Wer produziert den besten Code
Thema durchsuchen
Ansicht
Themen-Optionen

Code-Kata: Cache-Klasse. Wer produziert den besten Code

Ein Thema von Dejan Vu · begonnen am 30. Jul 2015 · letzter Beitrag vom 1. Aug 2015
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.767 Beiträge
 
Delphi 12 Athens
 
#1

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 09:26
Auch wenn ich weiß, dass nicht alle Anforderungen erfüllt sind, will ich doch einen ersten Versuch posten.
Dein Ansatz hat aber ein paar klitzekleine Denkfehler:

- Die Capacity der Liste wir automatisch erhöht, wenn der Count sie überschreitet. Damit wächst deine Liste über den anfänglichen MaxSize-Wert hinaus.

- Die ID muss nicht zwingen mit dem Index in der Liste identisch sein. Der ändert sich nämlich beim Löschen eines Elements in der Mitte für alle folgenden Elemente. Diese wären dann nicht mehr über ihre ursprüngliche ID erreichbar. Man bekommt dann also entweder das falsche Element oder legt ein Element nochmal im Cache ab, obwohl es schon da ist.

Das ist eben der Unterschied zwischen einer Liste und einem Dictionary.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.213 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 09:36
Was seid ihr alle so schnell? Ich hätte immer häppchenweise was daran gemacht und wäre frühestens zum Wochenende fertig
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.165 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 09:45
Was seid ihr alle so schnell? Ich hätte immer häppchenweise was daran gemacht und wäre frühestens zum Wochenende fertig
Zu schnell... Auf jeden Fall...

Darf das Vorgabe Objekt auch umgestellt werden? Es ist für mich vom System schon falsch...
Wer will schon ein Cache den er "per Hand" ansprechen muss...

Der Cache sollte so funktionieren, dass er bei Ansprache eines Objectes automatisch arbeiten kann...
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#4

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 19:59
Zu schnell... Auf jeden Fall...

Darf das Vorgabe Objekt auch umgestellt werden? Es ist für mich vom System schon falsch...
Wer will schon ein Cache den er "per Hand" ansprechen muss...

Der Cache sollte so funktionieren, dass er bei Ansprache eines Objectes automatisch arbeiten kann...
Ja, das sehe ich auch so.
Beim Zugriff auf ein Element, das nicht im Cache ist, sollte das Nachladen meines Erachtens durch die Klasse selbst erledigt werden - z.B. durch eine Callback-Routine, die beim Create übergeben wird.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 10:11
Auch wenn ich weiß, dass nicht alle Anforderungen erfüllt sind, will ich doch einen ersten Versuch posten.
Dein Ansatz hat aber ein paar klitzekleine Denkfehler:
Logo, so wirklich gelöst ist das natürlich nicht.

Am einfachsten würde ich das so lösen: Die Systems.Generics.Collections.TDictionary-Klasse nehmen, kopieren und alles Generische entfernen, damit es mit Delphi 7 kompilierbar wird.
An den Stellen (z. B. Add), wo auf den FGrowThreshold geprüft wird, zusätzlich die MaxSize mit ins Spiel bringen.

Fragen:
Was soll passieren, wenn die MaxSize erreicht wird und man weitere Elemente hinzufügt? Solls eine Exception geben?
Was soll passieren, wenn ich das selbe (!) Objekt unter verschiedenen Schlüsseln hinzufüge?
Welches Element soll eigentlich zurückgeben werden, wenn ich hinter einen Schlüssel 2..N Elemente gespeichert habe?

Ich verlange auch einen Testfall!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.767 Beiträge
 
Delphi 12 Athens
 
#6

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 10:25
damit es mit Delphi 7 kompilierbar wird.
Ist das etwa eine Vorgabe?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 10:38
damit es mit Delphi 7 kompilierbar wird.
Ist das etwa eine Vorgabe?
Habe ich wegen folgenden Satz und dem Profil von Dejan Vu mal angenommen:
Obwohl so eine Klasse nach Generics schreit, wollen wir darauf verzichten und als ID-Type einen Integer verwenden. Der Cache soll beliebige TObject-Referenzen verwalten.
  Mit Zitat antworten Zitat
Benutzerbild von TRomano
TRomano

Registriert seit: 24. Nov 2004
Ort: Düsseldorf
196 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 10:38
In der Praxis würde ich auch ein TDictionary nehmen und die Größe halt im Code auf MaxSize begrenzen. Ich würde auch nebenbei eine Statistik mit den den Aufrufen (Hits) führen und nur bei Überschreitung von MaxSize das Element mit den wenigsten Hits löschen, um das neue einzufügen. Ist aber vielleicht am Thema vorbei ...
Thomas Forget
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#9

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 13:48
Ich würde auch nebenbei eine Statistik mit den den Aufrufen (Hits) führen und nur bei Überschreitung von MaxSize das Element mit den wenigsten Hits löschen, um das neue einzufügen. Ist aber vielleicht am Thema vorbei ...
Das ist eben die Frage: Geht es hier nur um die saubere Umsetzung von Cache-Verdrängungsstrategien oder auch um deren Auswahl. Für das zweite gibt es Unmengen an wissenschaftlicher Literatur. Afaik geht das aber an der Zielstellung von so einem Kata vorbei
Vielleicht sollte man eine Strategie vorgeben.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.052 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 14:09
[OT] Fiel mir grad so ein, als ich das hier las: http://martinfowler.com/bliki/TwoHardThings.html [/OT]
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:27 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