Hoi allemaal!
Ik zit met een vraag waar ik een al een poos mee zit. Ik jaar of wat geleden een zoek programma gemaakt waarbij op inhoud van bestanden gezocht kan worden maar ook naar bestandsnamen en dergelijke.
Nu leek het mij leuk dit "project" opnieuw te gaan schrijven met alle kennis die ik nu heb en het werkt allemaal lekker en ben blij toe dat ik het gedaan heb, omdat de kwaliteit van de code een stuk hoger ligt dan het was. Waar ik voorheen alles in de CodeBehind pleurde heb ik nu een mooie SearchEngine class geschreven die verantwoordelijk is voor het zoeken en geeft resultaten terug.
Nu ben ik met wat zaken in aanraking gekomen en weet niet goed of ik de juiste weg op ben gegaan:
1. Mijn eerste gedachte was een methode te maken die resultaten terug geeft. Probleem hierbij was direct al het feit dat de resultaten pas toegevoegd werden wanneer de resultaten terug gegeven werden.
Als je bijvoorbeeld je C-schijf helemaal door wilt zoeken houd dat in dat je misschien wel 1+ uur niets op het scherm ziet
(wat uiteraard niet de bedoeling is). Ik heb dit opgelost door een event te maken OnFileFound die het resultaat terug geeft. Ik heb dit event gebruikt in de CodeBehind om de datagrid up te daten wanneer een resultaat gevonden is. Mijn vraag: Is dit een goede manier?
2. Een ander probleem wat ik had was response tijd. Pas als er een bestand gevonden is doe ik Application.DoEvents() om weer leven in de brouwerij te brengen. Echter als er dus niets gevonden wordt zal de applicatie "dood" zijn (aka. reageert niet). Dit heb ik opgelost door een tweede event te maken OnDirectoryScanned die bij elke directory een seintje geeft aan de mogelijke listeners. In de CodeBehind zal ik vervolgens weer Application.DoEvents() aanroepen om de boel weer tot leven te wekken. Nu zou ik dit ook nog voor OnFileScanned moeten doen. Is dit correct of is er een slimmere manier voor te vinden?
3. Als bestanden ontzettend groot zijn, bijvoorbeeld binary bestanden (iso's, img, etc) dan weet mijn bestand niet dat het een binair bestand is. Dit maak in zoverre uit, dat als iemand "in" de bestanden wil zoeken de response tijd daar verkracht wordt omdat hij nooit FileScanned of DirectoryScanned aanroept (daar komt hij simpel weg niet omdat hij het bestand aan het uitlezen is). Nu zou ik hier dus weer een of ander event voor moeten maken om dit op te lossen (OnFileProcessing ofzo). Het lijkt mij dat ik iets over het hoofd zie?
4. Ik wil een stabiele eenduidige manier om het venster aan de hand van de SearchEngine status te positioneren. Als ik bijvoorbeeld op "search" druk dan komt er een "stop" knop. Als hij klaar is met zoeken dan veranderd dit automatisch weer naar "search". Ik heb rond gekeken en in principe lijkt mij dat het State Pattern een mooie manier hier voor is. Op deze manier kan ik namelijk volgens mij ook onjuistheden voorkomen en bugs dus vermijden. Stel dat ik op "stop" druk en de state veranderd naar "stopped". Als de button dan niet verdwijnt wil dat dus zeggen dat de huidige status "stopped" is en ik zou een exceptie kunnen throwen in de StoppedSearchEngineState class wanneer er weer op stop gedrukt wordt. Op deze manier kunnen er dus nooit acties gebeuren die nooit mogen gebeuren. In mijn voorbeeld maakt dit niet zoveel uit maar als je een webshop of iets maakt zou het wel eens anders af kunnen lopen.
5. Het MVC model wordt binnen Java veel gebruikt voor het veranderen van de layout van het scherm aan de hand gebeurtenissen. Omdat .NET anders in elkaar steekt vraag ik mij daarom af of ik hier naar moet gaan kijken of niet. Het observer gedeelte binnen Java kan in mijn gedachte goed met delegates / events afgehandeld worden.
6. Met het State Pattern zat ik er aan te denken public readonly properties aan te maken die de controls vertellen hoe ze gerendered moeten worden. Denk aan:
In de abstracte state class kunnen al de protected variables vervolgens gezet worden naar de juistheid. Per state heb je dus perfect in beeld hoe de layout er uit dient te zien. Iemand hier ervaringen mee?
7. Zijn er andere design patterns die ik over het hoofd gezien heb of misschien geen pattern maar wel een goede manier om mijn probleem m.b.t. tot de layout te veranderen a.d.h.v. de status van in mijn geval de SearchEngine?
Alvast hartelijk dank!
Ik zit met een vraag waar ik een al een poos mee zit. Ik jaar of wat geleden een zoek programma gemaakt waarbij op inhoud van bestanden gezocht kan worden maar ook naar bestandsnamen en dergelijke.
Nu leek het mij leuk dit "project" opnieuw te gaan schrijven met alle kennis die ik nu heb en het werkt allemaal lekker en ben blij toe dat ik het gedaan heb, omdat de kwaliteit van de code een stuk hoger ligt dan het was. Waar ik voorheen alles in de CodeBehind pleurde heb ik nu een mooie SearchEngine class geschreven die verantwoordelijk is voor het zoeken en geeft resultaten terug.
Nu ben ik met wat zaken in aanraking gekomen en weet niet goed of ik de juiste weg op ben gegaan:
1. Mijn eerste gedachte was een methode te maken die resultaten terug geeft. Probleem hierbij was direct al het feit dat de resultaten pas toegevoegd werden wanneer de resultaten terug gegeven werden.
code:
1
| public SearchResults[] SearchFiles(....) { } |
Als je bijvoorbeeld je C-schijf helemaal door wilt zoeken houd dat in dat je misschien wel 1+ uur niets op het scherm ziet
2. Een ander probleem wat ik had was response tijd. Pas als er een bestand gevonden is doe ik Application.DoEvents() om weer leven in de brouwerij te brengen. Echter als er dus niets gevonden wordt zal de applicatie "dood" zijn (aka. reageert niet). Dit heb ik opgelost door een tweede event te maken OnDirectoryScanned die bij elke directory een seintje geeft aan de mogelijke listeners. In de CodeBehind zal ik vervolgens weer Application.DoEvents() aanroepen om de boel weer tot leven te wekken. Nu zou ik dit ook nog voor OnFileScanned moeten doen. Is dit correct of is er een slimmere manier voor te vinden?
3. Als bestanden ontzettend groot zijn, bijvoorbeeld binary bestanden (iso's, img, etc) dan weet mijn bestand niet dat het een binair bestand is. Dit maak in zoverre uit, dat als iemand "in" de bestanden wil zoeken de response tijd daar verkracht wordt omdat hij nooit FileScanned of DirectoryScanned aanroept (daar komt hij simpel weg niet omdat hij het bestand aan het uitlezen is). Nu zou ik hier dus weer een of ander event voor moeten maken om dit op te lossen (OnFileProcessing ofzo). Het lijkt mij dat ik iets over het hoofd zie?
4. Ik wil een stabiele eenduidige manier om het venster aan de hand van de SearchEngine status te positioneren. Als ik bijvoorbeeld op "search" druk dan komt er een "stop" knop. Als hij klaar is met zoeken dan veranderd dit automatisch weer naar "search". Ik heb rond gekeken en in principe lijkt mij dat het State Pattern een mooie manier hier voor is. Op deze manier kan ik namelijk volgens mij ook onjuistheden voorkomen en bugs dus vermijden. Stel dat ik op "stop" druk en de state veranderd naar "stopped". Als de button dan niet verdwijnt wil dat dus zeggen dat de huidige status "stopped" is en ik zou een exceptie kunnen throwen in de StoppedSearchEngineState class wanneer er weer op stop gedrukt wordt. Op deze manier kunnen er dus nooit acties gebeuren die nooit mogen gebeuren. In mijn voorbeeld maakt dit niet zoveel uit maar als je een webshop of iets maakt zou het wel eens anders af kunnen lopen.
5. Het MVC model wordt binnen Java veel gebruikt voor het veranderen van de layout van het scherm aan de hand gebeurtenissen. Omdat .NET anders in elkaar steekt vraag ik mij daarom af of ik hier naar moet gaan kijken of niet. Het observer gedeelte binnen Java kan in mijn gedachte goed met delegates / events afgehandeld worden.
6. Met het State Pattern zat ik er aan te denken public readonly properties aan te maken die de controls vertellen hoe ze gerendered moeten worden. Denk aan:
code:
1
2
3
| protected bool searchButtonIsVisible = false;
public bool SearchButtonVisible { ... } |
In de abstracte state class kunnen al de protected variables vervolgens gezet worden naar de juistheid. Per state heb je dus perfect in beeld hoe de layout er uit dient te zien. Iemand hier ervaringen mee?
7. Zijn er andere design patterns die ik over het hoofd gezien heb of misschien geen pattern maar wel een goede manier om mijn probleem m.b.t. tot de layout te veranderen a.d.h.v. de status van in mijn geval de SearchEngine?
Alvast hartelijk dank!