Avatar billede mickni33 Nybegynder
28. oktober 2008 - 10:37 Der er 8 kommentarer og
1 løsning

brug af facade

Vi har her på kontoret haft nogle diskutioner om hvordan vores facade skal benyttes og her er nogle forskellige udrag..

Hvilken en er korrekt?
eller er alle korrekte?
eller er ingen?
Der tages udgangspunkt i en Kunde klasse

1)GUI klasse hvor der sættes nogle properties som tilhøre kundedata... Denne metode har den fordel at GUI ikke har tilgang til andet end nogle properties hvor der kan hentes data fra
dermed er det ikke muligt for en extern udvikler at rode rundt nede i logikken(i et mere komplex eksempel)

En ulempe er at med et mere komplex eksempel kan man risikere at der skal ooprette 100 properties i facaden + dem der er i Kunde (altså noget dobbelt properties), er det normalt?

GUI klasse
Facade f = new Facade
f.Navn = textbox1
f.Adresse = textbox2
f.By = textbox3
f.opretKunde()
--------------

Facade klassen
private Kunde k;

public void opretKunde(){
  k = new Kunde()
  k.Navn = navn
  k.Adresse = adresse
  k.By = by
}

public void getKunde(){
  navn= k.Navn
  adresse = k.Adresse
  by = k.By
}
---------------------------------

2)Denne metode har den ulempe at man indirekte arbejder på kunde objektet helt oppe i GUI laget dermed er der adgang til alt hvis en eksterne udvikler skal lave en grænseflade... I et kompleks eksempel kan dette være svært for en ekstern udvikler da denne måske ikke kender flowet i at oprette en kompleks kunde
Dette ville jo være bestemt hvis det var facaden der sørgede for dette..

fordelen er jo at det er nemt at arbejde med og at man selv kan bestemme hvor meget data man vil bruge og de 100 properties skal ikke oprettes i facaden (men dog i Kunden)
GUI klassen
Facade facade = new Facade()  <-- i constructoren oprettes et kunde objekt

facade.kunde.Navn = textbox1
facade.kunde.Adresse = textbox2
facade.kunde.By = textbox3

og når data skal vises
textbox1 = facade.kunde.Navn
textbox2 = facade.kunde.Adresse 
textbox3 = facade.kunde.By
Avatar billede bvli Praktikant
28. oktober 2008 - 11:49 #1
Hej.

Som jeg husker en facade, er det en klasse som forenkler tilgange til et mere kompleks undersystem.

Jeg synes personligt at begge ovenstående eksempler komplicerer arbejdet med kundeobjektet.

Er det I vil opnå ikke reelt en løsere kobling? Overvej evt. at lave et service-lag, hvor I udstiller et api til at oprette og manipulere med en kunde-instans. Og design så evt. et DTO (Data Transfer Objekt) som I bruger til at kommunikere med service-laget. I kan så implementere diverse databinding interfaces i DTO'et, som gør det lettere at håndtere i GUI'en.

/B :)
Avatar billede mickni33 Nybegynder
28. oktober 2008 - 11:55 #2
jaaa det lyder meget smart
Avatar billede arne_v Ekspert
28. oktober 2008 - 23:05 #3
Både 1 og 2 er rigtigt dårlige.

En facade er som bvli ganske rigtigt siger en frontend til et subsystem. Typisk vil
man med en facade have noget med en factory eller noget DI som returnerer et interface.

I både #1 og #2 bliver den såkaldte facade brugt som frontend til en data klasse. Og
den bidrager ikke med noget som helst - hverken funktionalitet eller decoupling.

Så hellere noget a la:

I GUI:

IBusLog bl = BusLogFactory.CreateBusLog();
bl.CreateUser(tb1.Text, tb2.Text, tb3.Text);

hvor BusLogFactory.CreateBusLog returnerer en instans af en klasse som
implementerer IBusLog udfra noget konfiguration.

Hvis man foretrækker at bruge en data klasse så:

IBusLog bl = BusLogFactory.CreateBusLog();
bl.CreateUser(new User(tb1.Text, tb2.Text, tb3.Text));

men forskellen er ikke stor.
Avatar billede mickni33 Nybegynder
29. oktober 2008 - 09:05 #4
kan i eventuelt ligge nogle gode links...
husk at lave svar
Avatar billede arne_v Ekspert
30. oktober 2008 - 01:18 #5
Avatar billede mickni33 Nybegynder
30. oktober 2008 - 09:11 #6
>> Arne_v
hvad hvis din bl.CreateUser(tb1.Text, tb2.Text, tb3.Text);
har mere end 50 parameter?

Der må da findes en smart måde til at håndtere det?
Avatar billede arne_v Ekspert
31. oktober 2008 - 03:20 #7
Egenligt ikke. Måske vil et User objekt med 50 properties være bedre så. Men uanset
hvad skal du have flyttet 50 værdier fra form felter over i noget.
Avatar billede mickni33 Nybegynder
31. oktober 2008 - 09:08 #8
altså lave et User objekt til min GUI og så smide den med over i bl.CreateUser(UserObj);

ja det lyder mere smart
Avatar billede arne_v Ekspert
31. oktober 2008 - 11:42 #9
Ikke den store forskel, så skal du bare sætte 50 properties på userovj. Men
dokumentationen på CreateUser er lidt pænere.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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