Avatar billede chrisrj Forsker
05. januar 2014 - 13:11 Der er 7 kommentarer og
1 løsning

Design spørgsmål: Mange små klasse eller een stor?

Hejsa

Jeg sidder og laver mig en lille bysamfundssimulator, og er kommet lidt i tvivl om, hvad der giver mest mening/er mest overskueligt og vedligeholdbart.

Jeg har en klasse Job som indeholder de jobs folk kan have og arbejdsfunktionen (.Work()). Så langt så godt.

Men når de forskellige job ikke skal arbejde på samme måde(f.eks. fælde træer/lave brædder/bygge et hus) så skal jeg jo bruge forskellige funktioner til hvert job. Til hvert job hører også et værktøj(Tool) og et materiale(Materials), som de andre job ikke (nødvendigvis) bruger.

Jeg har pt. lavet fire andre job-klasser, hvor hver klasser stort set ens, bortset fra Work() og hvilket Tool og Materials de bruger(og et par andre småting). Men jeg synes det kommer til at virke temmeligt uoverskueligt, hvis(når) der er 30+ forskellige jobs. Og at lave en hel klasse bare for en eller to funktioner virker også som overkill...

Jeg har så overvejet at samle det hele i een klasse, men så er jeg jo nødt til at filtrere på hvem der må hvad(og hvordan gør jeg det bedst?). Og mængden af koden bliver ikke mindre, ligesom overskueligheden også er lav her. :-/

Så hvad synes I? :) Og hvorfor?? :D

Er der en løsning jeg ikke har overvejet?
Avatar billede runesoft Nybegynder
05. januar 2014 - 13:21 #1
Lav din Job klasse abstract, og lav alle dine specialiseringer som sub klasser til denne
Avatar billede chrisrj Forsker
05. januar 2014 - 13:38 #2
Det er stort set det samme som det jeg gør.

Hvorfor mener du, at denne løsning er bedst? :)
Avatar billede runesoft Nybegynder
05. januar 2014 - 14:40 #3
Din abstrakte klasse vil så være en definition af hvad et job er. Den skal selvfølgelig have en abstract Work() metode.

Da alle specialiseringer nedarver fra Job kan du nøjes med at håndtere Job ude fra.  Du kan f.eks. have en liste af Job og kalde Work på dem alle uden at vide hvilken specialisering det er.

Sub klasserne kender ikke noget til hinanden og det vil derfor være nemmere at vedligeholde, da du ikke skal bekymre dig om de andre job typer når du implementerer/retter en.
Avatar billede chrisrj Forsker
05. januar 2014 - 14:56 #4
Tak, godt svar. :)

Jeg venter lige og ser om der ikke skulle komme nogle flere synspunkter.
Avatar billede arne_v Ekspert
05. januar 2014 - 22:55 #5
En abstrakt basis klasse er den mest oplagte loesning.
Avatar billede chrisrj Forsker
08. januar 2014 - 22:31 #6
Nå, der kommer vidst ikke flere bud.

Arne - smider du også lige et svar, så kan du få et point eller to. ;)
Avatar billede arne_v Ekspert
08. januar 2014 - 22:41 #7
nej tak - det maa vaere runes point
Avatar billede chrisrj Forsker
08. januar 2014 - 23:00 #8
Ok, jeg takker og bukker for Jeres svar. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester