[delphi] collection framework, mvc support.

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik moet voor mijn werk 3 weken helpen in het debuggen van een oud systeem en ik ben op zoek naar vervangende objecten voor het collection framework en mvc support. Ik heb al even zitten bladeren op het internet, maar niet iets concreets gevonden.

Delphi is op zich best een leuke taal, alleen vind ik het jammer dat dit soort api`s missen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:47
Woei!
Alarmnummer aan de Delphi. :P

Delphi is best een leuke taal idd. De VCL vind ik zeer goed.
Wat vind je niet goed aan die collection objects van Delphi ?
(* whoami is nog niet zo thuis in MVC pattern)

https://fgheysels.github.io/


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-08 21:27

Creepy

Tactical Espionage Splatterer

Een hoop naar Delphi vertaalde API's staan op www.delphi-jedi.org (alleen de site lijkt nu down??). Maar k betwijfel of de MVC er tussen zit. Was de MVC niet een dunne wrapper om de standaard windows API heen?

Delphi heeft ihmo goede Collection / Container object (TList e.d.). Alleen geparametriseerde (???) typen worden niet ondersteund (zoals de vector in C++).

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:47
Creepy schreef op 07 January 2003 @ 10:58:
Delphi heeft ihmo goede Collection / Container object (TList e.d.). Alleen geparametriseerde (???) typen worden niet ondersteund (zoals de vector in C++).


Tja, Delphi kent dan -voor zover ik weet- ook geen Templates/generics. Dan is het wel logisch dat die geparameteriseerde collection objects niet bestaan.

https://fgheysels.github.io/


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Alarmnummer schreef op 07 januari 2003 @ 10:28:
Ik moet voor mijn werk 3 weken helpen in het debuggen van een oud systeem en ik ben op zoek naar vervangende objecten voor het collection framework en mvc support. Ik heb al even zitten bladeren op het internet, maar niet iets concreets gevonden.

Delphi is op zich best een leuke taal, alleen vind ik het jammer dat dit soort api`s missen.
Welk soort API's? MVC is IMHO geen API, maar een karige poging van MS om een OO framework om de winapi te gooien. Wat je met een collection framework bedoelt weet ik niet zeker, maar Delphi heeft niet echt een STL zoals C++. Dat heeft vooral te maken, zoals mijn voorgangers al melden, met het ontbreken van operator overloading en templates in pascal. Toch zijn er voor veel onderdelen vaak wel al standaard code te vinden. Voor queue's, lists, strings, sorteren enz. Sinds Delphi 6/7 ook meer standaard in Delphi.
Creepy schreef op 07 januari 2003 @ 10:58:
Een hoop naar Delphi vertaalde API's staan op www.delphi-jedi.org (alleen de site lijkt nu down??). Maar k betwijfel of de MVC er tussen zit. Was de MVC niet een dunne wrapper om de standaard windows API heen?
Dat is MFC. MVC betekend Modal View Controller en is een soort design pattern voor het scheiden van de logica, de GUI en de gegevens.

We adore chaos because we like to restore order - M.C. Escher


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Kan ik op een of andere manier ook achterhalen waar bepaalde exceptions zijn opgetreden? Een soortement van stacktrace zoals java dat ook heeft. Ik weet dat delphi gecompileerd wordt en de code volledig anders geschreven kan worden. En verder zal er wel niet dezelfde informatie beschikbaar zijn als in java. Maar we zitten met een aantal exceptions waar we de herkomst lastig van kunnen localiseren oa rangecheck errors.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
LordLarry schreef op 07 January 2003 @ 11:41:
[...]

Welk soort API's? MVC is IMHO geen API, maar een karige poging van MS om een OO framework om de winapi te gooien.
:? MVC is een design pattern en heeft niets te maken met ms. Ik ben alleen op zoek naar utility classes zoals PropertyListeners ed.
Wat je met een collection framework bedoelt weet ik niet zeker, maar Delphi heeft niet echt een STL zoals C++. Dat heeft vooral te maken, zoals mijn voorgangers al melden, met het ontbreken van operator overloading en templates in pascal.
Java ondersteunt ook geen operatoroverloading :( en standaard geen 'templates' maar die heeft een goeie collection framework. Het missen van deze features is geen argument om te zeggen dat er dan maar niets geimplementeerd hoeft te worden. Verder heeft delphi trouwens een object based hierarchie, en hierdoor zijn templates minder belangrijk dan bij c++.
Toch zijn er voor veel onderdelen vaak wel al standaard code te vinden. Voor queue's, lists, strings, sorteren enz. Sinds Delphi 6/7 ook meer standaard in Delphi.
Ik ben op zoek naar een hashtable.
Dat is MFC. MVC betekend Modal View Controller en is een soort design pattern voor het scheiden van de logica, de GUI en de gegevens.
Volgens mij is er sprake van een miscommunicatie.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Alarmnummer schreef op 07 januari 2003 @ 11:46:
:? MVC is een design pattern en heeft niets te maken met ms. Ik ben alleen op zoek naar utility classes zoals PropertyListeners ed.
Sorry, Creepy maakte me in de war :) Ik bedoelde MFC en begreep al dat jij dat niet bedoelde, maar juist MVC.
Java ondersteunt ook geen operatoroverloading :( en standaard geen 'templates' maar die heeft een goeie collection framework. Het missen van deze features is geen argument om te zeggen dat er dan maar niets geimplementeerd hoeft te worden. Verder heeft delphi trouwens een object based hierarchie, en hierdoor zijn templates minder belangrijk dan bij c++.
In zo verre dat je niet 1 algemene implementatie van een list kan maken en die dan voor elk type kan gebruiken, zoals dit wel kan in c++ mbv templates. Je zal voor een string, integer en een TObject elke een aparte klasse moeten maken met bijna identieke invulling. Dit maakt het IMHO stukke minder aantrekkelijk een STL te maken voor pascal. Het is natuurlijk niet onmogelijk en het is ook wel gedaan zoals o.a:
http://www.zeitungsjunge.de/delphi/Containers/
https://sourceforge.net/projects/decal/
http://www.boyet.com/EZDSL/default.htm
http://www.tempest-sw.com/nutshell/cltn50.html

Delphi zelf bevat er ook enkele in de unit Contnrs.

Er zijn ook n-tier en MVC frameworks te vinden, maar veelal niet gratis. Delphi 7 Architect komt o.a. met Bold.
Ik ben op zoek naar een hashtable.
THashedStringList, TBucketList en TObjectBucketList in D6/7
http://www.softcomplete.com/products/hashtrie/hashtrie.asp
en de eerder opgenoemde
Volgens mij is er sprake van een miscommunicatie.
Dit was een reactie op Creepy...

We adore chaos because we like to restore order - M.C. Escher


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
LordLarry schreef op 07 January 2003 @ 12:19:
[...]
In zo verre dat je niet 1 algemene implementatie van een list kan maken en die dan voor elk type kan gebruiken, zoals dit wel kan in c++ mbv templates. Je zal voor een string, integer en een TObject elke een aparte klasse moeten maken met bijna identieke invulling. Dit maakt het IMHO stukke minder aantrekkelijk een STL te maken voor pascal. Het is natuurlijk niet onmogelijk en het is ook wel gedaan zoals o.a:
http://www.zeitungsjunge.de/delphi/Containers/ https://sourceforge.net/projects/decal/
http://www.boyet.com/EZDSL/default.htm
http://www.tempest-sw.com/nutshell/cltn50.html
Ik had zelf in gedachten zoals ze dat bij java hebben gedaan: alles een object en verder niets werken met primitieve types.
Er zijn ook n-tier en MVC frameworks te vinden, maar veelal niet gratis. Delphi 7 Architect komt o.a. met Bold.
Ik ben nu al een aan het schrijven voor Delphi ;)
THashedStringList, TBucketList en TObjectBucketList in D6/7
http://www.softcomplete.com/products/hashtrie/hashtrie.asp
en de eerder opgenoemde
Ok, thanx

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Alarmnummer schreef op 07 January 2003 @ 11:42:
Kan ik op een of andere manier ook achterhalen waar bepaalde exceptions zijn opgetreden? Een soortement van stacktrace zoals java dat ook heeft. Ik weet dat delphi gecompileerd wordt en de code volledig anders geschreven kan worden. En verder zal er wel niet dezelfde informatie beschikbaar zijn als in java. Maar we zitten met een aantal exceptions waar we de herkomst lastig van kunnen localiseren oa rangecheck errors.
In de IDE heb je een 'call stack' window die je die informatie geeft. Als je het bij de klant ook wilt hebben zijn daar verschillende mogelijkheden toe.

Jedi Code Library (JCL) Debug Tools - http://www.delphi-jedi.org (MozillaPL)
ExceptionalMagic - http://dimus.virtualave.net/
madException - http://help.madshi.net/

We adore chaos because we like to restore order - M.C. Escher


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
LordLarry schreef op 07 January 2003 @ 12:25:
[...]


In de IDE heb je een 'call stack' window die je die informatie geeft. Als je het bij de klant ook wilt hebben zijn daar verschillende mogelijkheden toe.

Jedi Code Library (JCL) Debug Tools - http://www.delphi-jedi.org (MozillaPL)
ExceptionalMagic - http://dimus.virtualave.net/
madException - http://help.madshi.net/
MadException werkt perfect. Thanx!!!!

  • CyeZ
  • Registratie: September 2001
  • Laatst online: 23-08 22:06

CyeZ

Vroem vroem!!!

Hmm. Die kende ik nog niet. Maar vanaf nu gaat die madException component ook niet meer uit m'n VCL balk weg. Ding is ideaal als je iets moet debuggen wat bij je eigen bakken overal goed gaat en bij iemand anders gigantisch crashed.
Nu kan ik die personen dan heel simpel een bugreport laten sturen, en dan ook nog een waar je wat aan hebt. Alleen 'Access Violation at adress <random getal>' heb je vrij weinig aan, met deze exception handler krijg je precies de functie aanroepen te zien die er aan vooraf zijn gegaan.

Thnx LordLarry. :)

[18:54] <Prammenhanger> |HunterPro|eet
[18:55] <Prammenhanger> lijkt best op
[18:55] <Prammenhanger> |HunterProFeet


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Nieuw probleem:
zo nu en dan knalt de applicatie er volledig uit. Je krijgt ook geen dialog meer te zien, maar het proces is volledig verdwenen. Hoe kan ik erachter komen wat er aan de hand is?

  • joepP
  • Registratie: Juni 1999
  • Niet online
CyeZ schreef op 08 January 2003 @ 10:45:
[...]


Hmm. Die kende ik nog niet. Maar vanaf nu gaat die madException component ook niet meer uit m'n VCL balk weg. Ding is ideaal als je iets moet debuggen wat bij je eigen bakken overal goed gaat en bij iemand anders gigantisch crashed.
Nu kan ik die personen dan heel simpel een bugreport laten sturen, en dan ook nog een waar je wat aan hebt. Alleen 'Access Violation at adress <random getal>' heb je vrij weinig aan, met deze exception handler krijg je precies de functie aanroepen te zien die er aan vooraf zijn gegaan.

Thnx LordLarry. :)
Wat een meesterlijk component!

Bedankt, dit gaat mij -veel- vervelende bug-hunts schelen!

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

NP :). Vergeet ook niet de Jedi Code Library te bekijken. Deze kan ook alles en nog meer en is bovendien gratis en opensource. Dit integenstelling tot madException die alleen gratis is voor niet commercieel gebruik.

We adore chaos because we like to restore order - M.C. Escher


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Alarmnummer schreef op 08 januari 2003 @ 11:15:
Nieuw probleem:
zo nu en dan knalt de applicatie er volledig uit. Je krijgt ook geen dialog meer te zien, maar het proces is volledig verdwenen. Hoe kan ik erachter komen wat er aan de hand is?
Dat is heel erg vreemd. Dat zou een zeer ernstige situatie zijn, anders had er minstens een exceptie afgevangen geworden.

Dit is vrij lastig te debuggen, maar zou kunnen doormiddel van een debug log. Je zorgt dat je minstens op de verdachte plaatsen logged wat er gebeurd en langs welke functies gegaan wordt. Als je applicatie verdwijnt zou je uit die logs kunnen achterhalen wanneer het gebeurde en wat er fout ging.

Dit loggen zou kunnen dmv de winapi functie OutputDebugMessage en een externe viewer of het Delphi debug venster 'Event Log'. Een andere mogelijkheid is zelf iets te bouwen, maar de mooiste oplossing vind ik persoonlijk Raize CodeSite: http://www.raize.com/DevTools/CodeSite/Default.htm

We adore chaos because we like to restore order - M.C. Escher


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
LordLarry schreef op 08 januari 2003 @ 11:58:
[...]
Dat is heel erg vreemd. Dat zou een zeer ernstige situatie zijn, anders had er minstens een exceptie afgevangen geworden.

Dit is vrij lastig te debuggen, maar zou kunnen doormiddel van een debug log. Je zorgt dat je minstens op de verdachte plaatsen logged wat er gebeurd en langs welke functies gegaan wordt. Als je applicatie verdwijnt zou je uit die logs kunnen achterhalen wanneer het gebeurde en wat er fout ging.
Het vervelende is dat het ook niet echt een reproduceerbare fout is.
Dit loggen zou kunnen dmv de winapi functie OutputDebugMessage en een externe viewer of het Delphi debug venster 'Event Log'. Een andere mogelijkheid is zelf iets te bouwen, maar de mooiste oplossing vind ik persoonlijk Raize CodeSite: http://www.raize.com/DevTools/CodeSite/Default.htm
Ik zal er naar kijken.

*snapt niet dat sommige mensen nog zo in het stenen tijdperk kunnen leven*

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
3 vragen:

-ik zoek conversie routines voor primitieve types naar string. De intToStr heb ik al ontdekt, maar de rest is spoorloos

-wat voor een exception kan ik opwerpen als een preconditie niet heeft gehouden (bv bad input) Het wordt me niet duidelijk uit de documentatie wat ik moet kiezen

-zijn er ook object wrappers voor primitieve types? (Heb ze zelf namelijk al gemaakt).

  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 27-07 15:54
Alarmnummer schreef op 09 januari 2003 @ 16:20:
3 vragen:
-ik zoek conversie routines voor primitieve types naar string. De intToStr heb ik al ontdekt, maar de rest is spoorloos
Routines zoals FormatFloat, dit zit in principe in SysUtils
-wat voor een exception kan ik opwerpen als een preconditie niet heeft gehouden (bv bad input) Het wordt me niet duidelijk uit de documentatie wat ik moet kiezen
Je kan gewoon een ordinaire exception opgooien, maar je kan ook je eigen typen definieren
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
raise Exception.Create('dit is een fout');

type
    EMyException = class(Exception);
raise EMyException.Create('Custom exceptionclass');

// Ook heel handig, is een exception, maar de gebruiker
// krijgt nooit een foutmelding te zien:
Abort;

// Uit SysUtils:
  EIntError = class(EExternal);
  EDivByZero = class(EIntError);
  ERangeError = class(EIntError);
  EIntOverflow = class(EIntError);
  EMathError = class(EExternal);
  EInvalidOp = class(EMathError);
  EZeroDivide = class(EMathError);
  EOverflow = class(EMathError);
  EUnderflow = class(EMathError);
  EInvalidPointer = class(EHeapException);
  EInvalidCast = class(Exception);
  EConvertError = class(Exception);
  EAccessViolation = class(EExternal);
  EPrivilege = class(EExternal);
  EStackOverflow = class(EExternal);
  EVariantError = class(Exception);
  EPropReadOnly = class(Exception);
  EPropWriteOnly = class(Exception);
  EAssertionFailed = class(Exception);
  EInvalidContainer = class(Exception);
  EInvalidInsert = class(Exception);
-zijn er ook object wrappers voor primitieve types? (Heb ze zelf namelijk al gemaakt).
Naar mijn weten zijn er geen klassen String en Integer, wel een BigInteger dacht ik. Als ze er zijn ben ik er niet mee bekend. Maak er in iig geen gebruik van.

[ Voor 28% gewijzigd door Elissen op 09-01-2003 17:18 . Reden: Iets opgeschoond + toevoegingen ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Alarmnummer schreef op 09 January 2003 @ 16:20:
3 vragen:

-ik zoek conversie routines voor primitieve types naar string. De intToStr heb ik al ontdekt, maar de rest is spoorloos
Kijk zoals gezegt is eens in de Help bij de SysUtils unit. En speciaal naar de Format functie die erg lijkt op de sprintf functie van C.
-wat voor een exception kan ik opwerpen als een preconditie niet heeft gehouden (bv bad input) Het wordt me niet duidelijk uit de documentatie wat ik moet kiezen
Met een Assert natuurlijk! :) Die kan je in je Porject Options ook uitzetten voor als je dat liever hebt als het naar de klant gaat. Bij de exceptie wordt meteen de unit en regelnummer gegeven.
Delphi:
1
procedure Assert(ConditionThatMustBeTrue: Boolean [; const msg: string]);
-zijn er ook object wrappers voor primitieve types? (Heb ze zelf namelijk al gemaakt).
Nee, zijn er niet

We adore chaos because we like to restore order - M.C. Escher


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:47
[nohtml]
Alarmnummer schreef op 09 januari 2003 @ 16:20:
3 vragen:

-ik zoek conversie routines voor primitieve types naar string. De intToStr heb ik al ontdekt, maar de rest is spoorloos
Je hebt ook gewoon de DateToStr(), FloatToStr(), CurrToStr(), ....

[nohtml]
LordLarry schreef op 09 januari 2003 @ 20:43:
[...]


Met een Assert natuurlijk! :) Die kan je in je Porject Options ook uitzetten voor als je dat liever hebt als het naar de klant gaat. Bij de exceptie wordt meteen de unit en regelnummer gegeven.
[code=delphi]
Een Assert ga je toch enkel in 'Debug build' gebruiken?

[ Voor 39% gewijzigd door whoami op 10-01-2003 10:10 ]

https://fgheysels.github.io/


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

whoami schreef op 10 January 2003 @ 10:09:
Een Assert ga je toch enkel in 'Debug build' gebruiken?
Origineel wel, maar tegenwoordig gaan er ook stemmen op om het gewoon aan te laten staan. Vooral voor pre-conditions.

Stel het bijna onmogelijke geval voor dat je nog een bug hebt ik je programma terwijl het bij de klant draait. Als je asserts uit heb staan krijg je een exceptie bij het benaderen van adres $AF5261 op $A124B5. Als je asserts aan hebt staan krijg je een assert exceptie in unit1.pas op regel 64 met de melding dat HuppeldepupObject gezet moet zijn. Ik weet wel wat handiger is voor de programmeur :)

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1