Toon posts:

[Java|Alg] OO design van een chatbox*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben zo'n beetje nu een jaar of twee bezig met programmeren in Java. Allemaal erg leuk. Onlangs ben ik me meer gaan richten op het OOP in Java. Had het idee dat ik dat nog niet goed beheerste/snapte. Heb inmiddels een boek gelezen en een paar kleine OOP projectjes gedaan om er wat handiger in te worden.

Momenteel host ik een chatbox, die ik de afgelopen maanden heb gemaakt in Java. Ik ben nu echter van plan mijn server te herschrijven en je raadt het al: hij moet wat meer OO worden :) Ik heb al wel nagedacht en heb al wat zitten coden, maar ik vraag me af of dit wel de goede weg is (ja er zijn meer wegen naar Rome, maar heb het idee dat het toch niet goed zit).

De huidige situatie ("zonder" OOP):

De Server luistert naar inkomende sockets en geeft deze door aan de ClientHandler (class die alle clients beheerd e.d.). De ClientHandler maakt een nieuwe instantie van een Client. Deze Client doet veel...teveel. Hij heeft 1 thread, leest en schrijft data en werkt alle chatcommando's af...een regel of 700 code.

De nieuwe situatie (meer OOP gericht):
De Server luistert naar inkomende sockets en geeft deze door aan de ClientHandler (class die alle clients beheerd e.d.). De ClientHandler maakt een nieuwe instantie van een Client. Dit deel is dus hetzelfde gebleven. Maar nu...het leek mij goed om de Client een eigen Reader en een eigen Writer te geven. De afhandeling van chatcommando's moet plaats vinden in een CommandHandler (die ik gedacht had als Singleton, want niet elke Client hoeft een CommandHandler).

Wat er dus gebeurt: de client maakt een referentie aan naar een Reader en een Writer....de Reader leest binnengekomen data en stuurt deze door naar de CommandHandler (samen met een referentie van zichzelf, anders weet de CommandHandler niet van welke Client de data afkomstig is). Als het commando is afgehandeld, gaat het naar de Writer (weer samen met een ref van de Client zelf), waar het verstuurd wordt naar alle clients.

Ligt het nu aan mij of is dit omslachtig? Het lijkt erop dat de data van hot naar her gaat voordat het de deur uit gaat naar de appletclient.

Verwijderd

Topicstarter
Oeps ben de titel vergeten :?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
offtopic:
Ik heb je titel aangepast, let daar in het vervolg zelf even op aub.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Ik kan moeilijk volgen met je uitleg (misschien ligt het aan mij) ;).
Maar, misschien is het handig als je eens een UML'etje maakt over hoe je denkt dat je je classes gaat gaan ontwerpen, en hoe je ze gaat laten samen werken.

Misschien kan het Observer - pattern ook nog wel van pas komen bij dat chatsysteem, dus misschien moet je dat ook maar eens bekijken.

https://fgheysels.github.io/


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

Alarmnummer

-= Tja =-

Als je veel met oo design bezig bent, dan zul je zien dat je regelmatig objecten aan het verplaatsen bent of 'onnodige' aanroepen (omwille van het design en niet zozeer omdat er geen andere oplossing voor is), maar je moet je afvragen over het acceptabel is.

Als je meteen aan het begin je bezig gaat houden met optimalisate (terwijl het niet hoeft) dan zal je ontwerp ten onrechte een stuk slechter worden. Dus alleen als je weet dat jij een super high performance chatserver nodig bent, dan en dan alleen zou ik me vanaf het begin bezighouden met optimalisatie en anders zou ik dat achterwege laten. Dit wil trouwens niet zeggen dat je dan ook meteen maar de groot mogelijke bagger mag schrijven, je zult altijd wel je datastructuren en algoritmes met enig beleid moeten ontwerpen/uitkiezen.
premature optimisation is the root of all evil
Dijkstra

[ Voor 19% gewijzigd door Alarmnummer op 20-08-2003 10:24 ]