Avatar billede mach3 Nybegynder
01. februar 2005 - 16:42 Der er 11 kommentarer og
1 løsning

Design patterns: Controller vs Interface?

Hej,

jeg har et spørgsmål i forbindelse med OOA/D og design patterns. Kilden er "Applying UML And Patterns" af Craig Larman.

Det er i forbindelse med en webapplikation. Jeg har en klassisk system arkitektur:
1. UI
2. Applikationslogik
3. Database

Der er en hel masse UI klasser. Jeg følger GRASP og derfor må UI klasserne ikke få direkte adgang til applikationslogikken. Der er derfor 'øverst' i applikationslogik laget nogle klasser som tager sig af input fra UI klasserne. Nærmere beskrevet er der tale om use case controllere - een use case controller per use case (bør use case controllers være et lag for sig selv? for så får jeg fire lag??). Disse controllere har ansvaret for at modtage system input fra UI klasserne og uddelegere opgaverne til klasserne i applikationslogik laget.

De klasser som jeg betegner som use case controllere, er de ikke på samme tid nogle interface klasser - og kan det lade sig gøre at være begge dele på en gang? Eller er use case controller og interface bare to ord for det samme?

Alternativet til use case controllere ville være at anvende en facade controller, men så ville jeg overtræde reglerne for Low Coupling og High Cohesion - derfor har jeg valgt at lave een use case controller per use case.

Jeg håber der er nogen som kan forklare det lidt :o)

Mvh
Avatar billede arne_v Ekspert
01. februar 2005 - 17:00 #1
Et logisk interface definerer en grænseflade.

C# understøtter interface og abstract class, som kan bruges til at implementere
et logisk interface med en ikke for tæt kobling til implementationen.

En controller er en klasse som "gør noget".

Dine klasser laver et logisk interface og er controller.

Og det ville være pænt implementerings mæssigt at expose et interface eller
en abstract class og så lade din konkrete controller klasse arve fra den.

Generelt kan du sagtens have et interface som ikke har en controller bag
ved sig.

En controller klasse behøver rent implementerings mæssigt ikke arve fra
et interface eller en abstract class.

Men man kan vel godt sige at en controller altid definerer en form for
logisk interface.

[men jeg vil skulle hjem og checke i Larman for at se om hans definition
af begreberne svarer til min]
Avatar billede arne_v Ekspert
01. februar 2005 - 17:01 #2
Iøvrigt:

Lag 3 må vel være data lag og ikke database:

Nej dine controller klasser må høre til applikation slogik laget.
Avatar billede mach3 Nybegynder
01. februar 2005 - 18:06 #3
Hej arne_v >>

ja lag 3 er naturligvis data laget. jeg har en DbHandler klasse som det eneste i lag 3. Denne klasser overtræder så vidt jeg har forstået principperne for low coupling (alle klasser som skal have adgang til databasen er forbundet til denne klasse) og high cohesion (klassen laver mange urelaterede ting - den tager for stort ansvar).

Men som jeg har forstået det er det i nogle tilfælde ok (er min DbHandler Pure Fabrication?). For i større projekter kan det tænkes, at der er mange flere OO programmører i forhold til SQL eksperter - og det er ikke sikker at SQL eksperterne har så meget forstand på OO programmering. Så vil det være nemmere for vedligholdelses arbejdet, at al SQL er samlet i een klasse som så er DbHandler.

Men Craig Larman nævner, at Pure Fabrication (hvis DbHandler ellers er Pure Fabrication) kun bør anvendes, når man er "desperat", men jeg tror det er ok i tilfælde af en DbHandler.

>>
Men man kan vel godt sige at en controller altid definerer en form for
logisk interface.

Betyder det at en controller er et interface uden så egentligt at være det eller hvad?

mvh
Avatar billede mach3 Nybegynder
01. februar 2005 - 18:09 #4
Og DbHandler er faktisk overholder faktisk følgende patterns
1. Facade controller (det samme som Facade?)
2. Controller
3. Pure Fabrication

Jeg er ny udi desing patterns, skal det lige siges. Men de minder meget om hinanden de tre jeg lige har nævnt - eller er det en ukorrekt iagttagelse?

mvh
Avatar billede mach3 Nybegynder
01. februar 2005 - 18:10 #5
Og alle de tre nævnte patterns er samtidigt et interface, ikke?

Men der er da ikke noget pattern der hedder Interface, vel?

mvh
Avatar billede arne_v Ekspert
01. februar 2005 - 18:37 #6
Det er jo mere terminologi end arkitektur.

Som jeg ser det så er interface og facade det samme.

Larman skelner mellem facade controllers og use case controllers. Jeg synes ikke
at den opdeling nødvendigvis er helt entydig. Men hvis vi føger hans terminologi,
så er en controller som er et interface/facade til hele systemet en facade controller.
Avatar billede arne_v Ekspert
01. februar 2005 - 18:50 #7
Pure fabrication er en fællesnævner for klasser som kun eksisterer af
kode mæssige årsager men ikke har nogen baggrund i data eller forretnings logik.
Larman angiver jo selv et eksempel med en persisted storage klasse. Jeg synes
måske at der ville være bedre eksempler. Fordi en database forbindelse er
trods alt noget rimeligt konkret. Men er det godt nok for Larman, så er det også
godt nok for dig.
Avatar billede mach3 Nybegynder
01. februar 2005 - 19:24 #8
ok tak for det. det er ellers en meget god bog synes jeg. første gang man læser tingene tænke man "nå!", men anden gang siger man "nååååå" :o)

men jeg er ikke færdig med den bog endnu :-)

>>
Men er det godt nok for Larman, så er det også
godt nok for dig.

Ok det godtager jeg så. Bare læg et svar, men jeg lader dog lige tråden køre lidt videre for at se om der er andre der vil på banen.

mvh
Avatar billede arne_v Ekspert
01. februar 2005 - 19:30 #9
Jeg synes også at det er en rigtig god bog.

Det er ikke det samme som at jeg kan huske alle hans definitioner eller at
jeg er enige i dem alle sammen.
Avatar billede arne_v Ekspert
01. februar 2005 - 19:31 #10
og et svar
Avatar billede arne_v Ekspert
25. februar 2005 - 20:58 #11
så mangler du bare at acceptere
Avatar billede mach3 Nybegynder
25. februar 2005 - 20:59 #12
sorry - havde lige glemt det. tak for hjælpen.
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