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.