Avatar billede funkylaundry Nybegynder
17. november 2010 - 10:16 Der er 1 kommentar

Centraliseret eller decentraliseret flow?

Jeg sidder pt. med en eksamensopgave i javaprogrammering og prøver selvfølgeligt at leve op til alle gode skikke omkring objektorienteret programmering med løs kobling og høj binding.

Jeg har i øjeblikket to løsningsmuligheder i spil.

Den ene involverer at man laver en "flowcontroller"-klasse, der holder styr på kodeflowet. Denne klasse har ansvar for at oprette objekter af de forskellige klasser, foretage kald og videresende returværdier fra én klasse til en anden. På den måde går flow'et fra flowcontrolleren til klasse A. Klasse A returnerer en værdi til flowcontrolleren, som måske kalder klasse B med denne værdi som parameter, hvorefter en ny værdi returneres til flowcontrolleren der kalder en ny klasse osv. osv.

Denne løsning kalder jeg centraliseret, da flowcontrolleren styrer al trafik. Hvis klasser har brug for at trække på ressourcer i andre klasser kan de selvfølgelig gøre det direkte, således at klassen "Bil" f.eks. kender klassen "Hjul", men det overordnede flow skal gå gennem flowcontrolleren.

Den anden løsning bygger på at hver enkelt klasse har metoder til at kalde hinanden afhængig af den kontekst de indgår, således at man helt går udenom controller-klassen. På den måde vil klasse a i ovenstående eksempel kalde metoder i klasse B direkte og bruge sin egen returværdi som parameter i kaldet.

Problemet er, at jeg lidt har mistet overblikket over fordele og ulemper og er i tvivl om hvilken løsning der er bedst. I praksis er jeg klar over at begge muligheder kan løse problemet og spørgsmålet er nok mest af akademisk karakter, men jeg har brug for noget input på hvad der er af fordele og ulemper. Indtil videre er jeg selv nået frem til følgende:

Intuitivt synes den decentraliserede model mest effektiv, da man sparer nogle linier kode og umiddelbart synes klasserne også mere "autonome". Til gengæld fordrer princippet omkring "løs kobling", at klasserne kender så lidt til de omkringliggende klasser som muligt og dette synes i højere grad at gøre sig gældende i den centraliserede model, hvor hver enkel klasse (stort set) kun behøver at kende flowcontrolleren. Til gengæld synes der at ligge et meget stort ansvar på denne.

Indtil videre går jeg efter den centraliserede model - mest af den grund at det synes lettere at fejlfinde og overskue, når man ikke skal ud og lede efter kald i 100 forskellige klasser - men jeg synes ikke min argumentation er så stærk og kan virkelig godt bruge noget mere input på hvad der ellers kan være af fordele og ulemper.
Avatar billede gedfrik Nybegynder
17. november 2010 - 11:24 #1
Du kommer nok ikke udenom en eller flere controllers!

Fordelen ved dem er, som du siger, at du opnår løs kobling. Hvis ikke du benytter en controller vil du meget hurtigt have klasser der kender hinanden på kryds og tværs, og det bliver svært at overskue hvad de forskellige klasser er ansvarlige for.

En klasse skal være veldefineret, og de arbejdsopgaver du tildeler dem skal være begrænsede. I det ligger også at de ikke kender, eller er ligeglade med, hvad eventuelle andre klasser bruger deres metoder til - ellers ville de ikke være veldefinerede, da de pludselig også har til opgave at kalde metoder i en hel anden klasse.

Samtidig gør du selvfølgelig også livet nemmere for dig selv hvis du laver en lille ændring i klasse B's metode, der bruger klasse A pga. den løsere kobling. Det giver sig selv, og det virker til du har styr på den del af argumentationen :)

Så fordelene ved brug af controllers:

- Løs kobling
- Bedre definerede klasser, færre ansvarsområder
- Bedre overblik

Du får noget mere kode, og der er lidt mere at sætte sig ind i. Det kan tage lidt tid at sætte sig ind i et programs flow, da det går gennem flere led. Men det er den eneste vej frem, hvis du vil lave noget der ikke skal ligne smadder-kode.
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
Kategori
Kurser inden for grundlæggende programmering

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