Avatar billede mach3 Nybegynder
26. januar 2005 - 09:54 Der er 38 kommentarer og
2 løsninger

OOAD med asp.net?

hej,

jeg har lavet en webapplikation og er nu i gang med at dokumentere den.
ooad. unified process. uml.

use cases. system sekvens diagrammer. domain model. interaktionsdiagrammer. klasse diagrammer. osv osv

og jeg forsøger at følge principperne så godt som muligt bag ooad tankegangen, har bla lavet en facade til databasen.

men jeg synes, at user interfacet gør det svært at lave et ideelt design.

gælder der 'særlige' regler, når man skal lave webapplikationer??

som det er nu:
jeg har nogle webforms som er user interfacet til brugeren. fx er der en der hedder tilmeld.aspx og en der hedder soeg.aspx - jeg har så i VS.NET lavet to klasser der hedder tilmeld.cs og soeg.cs.

jeg sidder og udvikler på localhost. når jeg skal have det op at køre på serveren skal man bare lige kompile koden først. så smider man alle aspx'er op på serveren, og det gør man også med den .dll der kom ud af kompileringen. så der er ingen .cs filer på serveren. kun aspx'er og en .dll - ved ikke om der er en smartere måde at gøre det på?

men for at give et eksempel fra koden med soeg.aspx og soeg.cs:

brugeren indtaster søgekriterier i soeg.aspx. der er nogle TextBoxes og der er nogle DropDownLister. disse er alle erklæret i soeg.cs som også har en eventhandler for den button brugeren trykker på når der skal søges.

soeg.cs opretter så en
DbHandler dbTest = new DbHandler();
og kalder en funktion i DbHandler i klassen som returnerer søgeresultaterne, som så vises på soeg.aspx.

sådan er det for alle siderne brugeren kan komme ind på - de har en aspx og de har en .cs.

ved godt det er et lidt abtstrakt spørgsmål måske, men i må spørge løs hvis det er. håber at få noget input :-)

mvh
Avatar billede arne_v Ekspert
26. januar 2005 - 10:29 #1
Der er ikke specielle regler for web applikationer.

Klasse diagram må jo være oplagt (husk at din .aspx bliver compilet til en klasse).

Har du en decideret domain model med klasser for hver tabel eller er det bare
web kontrol---SQL---database ?

Umiddelbart vil jeg mene at en sequence diagram var godt til at vise
teknikken i en ASP.NET side.
Avatar billede burningice Nybegynder
26. januar 2005 - 11:35 #2
husk også, at soeg.cs ikke som sådan er din klasse. Det er bare en tekstfil klassen ligger i. Der kan godt være mange klasser i en enkelt tekstfil, og med .net 2.0 kan man endda splitte en klasse over flere filer.
Avatar billede mach3 Nybegynder
26. januar 2005 - 11:36 #3
cyberfessor >> det har du ret i, men i mit tilfælde har jeg een klasse per .cs fil. det gør det lidt mere overskueligt synes jeg :-)
Avatar billede mach3 Nybegynder
26. januar 2005 - 11:38 #4
arne_v >>
jeg har en domain model, som indeholder konceptuelle klasser med associationer og attributer. det vigtigste har dog været at identificere konceptuelle klasser. for mange associationer gør mere skade end de gør gavn (fra "applying uml and patterns" - craig larman).

>>Har du en decideret domain model med klasser for hver tabel eller er det bare
web kontrol---SQL---database ?

så vidt jeg har forstået skal man undgå at komme ind på databasen i en domain model? men hvor skal det så ske? jeg vil gerne lave et E/R diagram for databasen, men ved ikke helt hvor det hører til...
Avatar billede arne_v Ekspert
26. januar 2005 - 11:53 #5
Det jeg spørger om er om din DbHandler returnerer en DataReader du bruger
i dine web kontroller eller om du returnerer objekter fra din domain model ?

Det sidste er det mest pæne OO mæssigt, men anvendt ukritisk kan det
godt give et stort performance overhead.
Avatar billede mach3 Nybegynder
26. januar 2005 - 12:07 #6
DbHandler har en en række funktioner, som returnerer forskelligt. Det er ikke alle sammen, som har en returtype, det gælder for dem som der er INSERT funktioner.

Jeg har returtyperne:
DataSet
Bool
Int
String
Avatar billede arne_v Ekspert
26. januar 2005 - 12:10 #7
OK men så kan man vel også sige at din domain model kun er implementeret i
database strukturen og ikke i et sæt data klasser
Avatar billede mach3 Nybegynder
26. januar 2005 - 12:19 #8
arne_v >>
jeg tror ikke vi har samme forståelse for en domain model :-)
jeg anvender en domain model ud fra følgende (citat fra applying uml and patterns" - craig larman, side 128):

"The quintessential object-oriented step in analysis or investigation is the decomposition of a domain of interest into individual conceptual classes or objects - the things we are aware of. A domain model is a visual representation of conceptual classes or real-world objects in a domain of interest".

Efterfølgende giver han et eksempel på en domain model (fra et supermarked). Klasserne er som følger:
Sale.
Payment.
Register.
Store.
Item.
Sales LineItem.
Manager.
Cashier.
Customer.
Product Catalog.

Det var de fleste af dem. Ud fra eksemplet forstår jeg det sådan, at man ikke skal helt ned på database niveau i en domain model. Er det en ukorrekt forståelse?

mvh
Avatar billede burningice Nybegynder
26. januar 2005 - 12:23 #9
men.. har du så sådanne objecter, eller får du bare et dataset tilbage direkte til dit UI-lag som du udskriver ?
Avatar billede mach3 Nybegynder
26. januar 2005 - 12:27 #10
cyberfessor >>
Ja, jeg har noget lignende. I min webapplikation er der:
Medarbejder.
Manager.
Admin.
Vare.
VareBeskrivelse.
Profil.
Log. (Er faktisk ikke sikker på om denne er en konceptuel klasse).

Det var lige nogle af mine konceptuelle klasser i domain modellen.
Avatar billede arne_v Ekspert
26. januar 2005 - 12:28 #11
Du skal ikke ned og tænke i tabeller i en domain model.

Klasserne i en domain model behøver ikke nødvendigvis at ende op i databasen.

Men efter at du har lavet din model skal den jo implementeres.

Og mine kommentarer går på den del af din domain model som du "persisterer", som
det så flot hedder i bøgerne.

Implementer du alle data klasserne fra din domain model og bruger dem i
dit data lag eller bruger du et relationelt interface (ADO.NET eller dine
klasser ovenpå ADO.NET).

Som jeg forstod en af dine kommentarer, så er det det sidste.

Og så mener jeg at du bliver nødt til at skrive lidt om det.

Der kan være mange gode grund etil at vælge det. Bl.a. performance. Men der
er ikke den direkte sammenhæng mellem din domain model og implementeringen.
Avatar billede mach3 Nybegynder
26. januar 2005 - 12:43 #12
>>Men der
er ikke den direkte sammenhæng mellem din domain model og implementeringen.

Det har du ret i, her er lige et citat der bekræfter det:

"A domain model, as shown in Figure 10.2, is a visualization of things in the real-world domain of interest, not of software components such as Java or C++ class (see Figure 10.3), or software objects with responsibilities." (s.130).

Men domain modellen er god som inspiration når koden implementeres.

>>
Implementer du alle data klasserne fra din domain model og bruger dem i
dit data lag eller bruger du et relationelt interface (ADO.NET eller dine
klasser ovenpå ADO.NET).

Som jeg forstod en af dine kommentarer, så er det det sidste.

Ja, det har du ret i. Det er sådan det fungerer :o)
Avatar billede mach3 Nybegynder
26. januar 2005 - 12:45 #13
cyberfessor >>

>>men.. har du så sådanne objecter, eller får du bare et dataset tilbage direkte til dit UI-lag som du udskriver ?

datasets der bliver returneret fra DbHandler bliver udskrevet i form a DataGrids så brugeren kan se data. vil du foreslå at gøre det på en anden måde?
Avatar billede burningice Nybegynder
26. januar 2005 - 12:54 #14
Kommer helt an på hvilke data det er.. men hvis det f.eks. er et grid over alle medarbejderne, ville det så ikke skabe mere konsistens hvis du havde et array af medarbejder-objecter som du bindede til dit grid?

Jeg mener, hvis man vælger at bruge Businnes Objects, bør man ikke gøre det konsekvent hver gang så?
Avatar billede mach3 Nybegynder
26. januar 2005 - 13:31 #15
Business objecter anvender jeg på følgende måde:

aspx:
<%@ Page language="c#" Inherits="Test.Code.Search" %>

cs:
namespace Test.Code
{
  public class Search
  {
    Page_Load;
    En EventHandler til at starte en søgning når der klikkes på button i aspx;
    DbHandler DbTest = new DbHandler;
    dbTest.Soeg(Parametre);
    Plus kode til at binde søgeresultater til datagrid;
    Plus andet funktionalitet;
  }
}

Så jeg forstår ikke helt hvad du mener med
>>Jeg mener, hvis man vælger at bruge Businnes Objects, bør man ikke gøre det konsekvent hver gang så?

Det at jeg anvender business objekter var for at slippe for at bruge codebehinds, så skal man flytte alle .cs filerne med over på serveren så vidt jeg har fortået. med business objekter smider man bare den compilede .dll over og så kører det :-) men det er vist ikke helt det du mente med din kommentar?
Avatar billede mach3 Nybegynder
26. januar 2005 - 13:55 #16
Så en anden ting: Hvordan udskriver i et klasse diagram? Det jeg har lavet (reverse engineered) fylder snildt fire A4 sider :o)
Avatar billede burningice Nybegynder
26. januar 2005 - 13:57 #17
wel... nu er ovenstående klasse det man vil kalde for en codebehind, så det slipper du aldrig for at bruge.

Det er rigtigt, at VS bruger termen codebehind til at skabe en relation mellen en aspx-fil og cs/vb-fil, men i sin enkelthed er codebehind den klasse som aspx-klassen arver fra (husk på at aspx-siden også blive compilet til en klasse). Så om man bruger BO eller ej, kan man altid nøjes med at uploade dll-filen.

Jeg vil mene at man ikke skal blande BL ind i sit DAL. Åhja... UI, CB, BO, BL, DAL... det er vist ikke så længe siden vi havde den diskussion. Kunne være jeg bare skulle blande mig udenom :P
Avatar billede burningice Nybegynder
26. januar 2005 - 13:58 #18
hvis man rigtig skal imponere får man det vel trykt på en plakat :P
Avatar billede arne_v Ekspert
26. januar 2005 - 14:02 #19
En farve A2 printer er en god ting til store diagrammer !

:-)

Reverse engineered klasse diagrammer er tit ubrugelige fordi der er for meget info på dem.

Måske kan du strukturere det lidt:
- et diagram som viser alle pakker
- et diagram per pakker som viser klasser (uden at vise felter & metoder)
- et diagram for hver vigtig gruppe af klasser som viser de klasser med felter og metoder
Avatar billede mach3 Nybegynder
26. januar 2005 - 14:15 #20
cyberfessor >>

du har ret, det er codebehinds jeg anvender. hmm, jeg synes jeg har svært ved at kende forskel på codebehinds og business objekter.

halvdelen af alle de forkortelser du kommer med fatter jeg hat af :o)
Avatar billede burningice Nybegynder
26. januar 2005 - 14:43 #21
UI = User Interface
CB = Code Behind
BO = Business Objects
BL = Business Logic
DAL = Data Layer Access

ja... det er ikke nemt altid at dele det klart op. Det var også det diskussionen dengang kørte op. Om ens codebehind overhovedet kan ses som en form for Business Logic, og ikke bare en form for Presentation Logic. Et system som STRUTS laver en noget mere klar opdeling.

Men som arne så fint indledte med at sige

Der er ikke specielle regler for web applikationer.

:)

så hvorfor blive gråhårede over noget vi bare kan smile til og sige, "nu gør jeg det på MIN måde" :)
Avatar billede burningice Nybegynder
26. januar 2005 - 14:49 #22
ang. seperering af UI, CB, BO og DAL kunne man forestille sig noget i den her retning:

1) man har sin aspx-side hvorpå der er et grid
2) i sin CB bruger man et Business Object på denne måde

Medarbejder[] medarbejderListe = Medarbejder.Match("alder > 10");

og binder nu dette array til griddet.

3) Medarbejder-klassen (BO) har altså en statisk metode, Match, som generer en sql-string baseret på filteret og eksekverer det igennem DAL'en. Som retur kommer der en datareader hvorved man kan oprette x-antal Medarbejder-objecter ved at iterere gennem datareaderen.

4) Ved at basere hele DAL'en på interfaces (IDataReader, IDbCommand, IDbConnectio osv.) kan man gøre DAL'en uafhængig af hvilken datastore der bruges.


Det er da en ide til opdeling som er rimelig tydelig.
Avatar billede mach3 Nybegynder
26. januar 2005 - 14:51 #23
Rapporten skal desværre snart afleveres, så der er desværre ikke så meget tid til at lave koden så meget om. Tilbage er der bare at skrive om det og så argumentere for det efter bedste evne :o)
Avatar billede burningice Nybegynder
26. januar 2005 - 14:52 #24
rettelse

4) Ved at basere hele DAL'en på interfaces (IDataReader, IDbCommand, IDbConnection osv.) kan man gøre BO'et uafhængigt af hvilken DAL der bruges.
Avatar billede mach3 Nybegynder
26. januar 2005 - 14:56 #25
cyberfessor >> har du et link til den tråd du henvise til - kunne godt tænke mig at læse den.
Avatar billede burningice Nybegynder
26. januar 2005 - 15:19 #26
Hvis ikke at søgemaskinen på eksperten sucks, så kunne jeg godt. jeg kan virkelig ikke finde den igen, desværre.. har søgt i 20 minutter og giver op :(
Avatar billede mach3 Nybegynder
26. januar 2005 - 15:27 #27
cf >> ok, mon ikke den dukker op en dag :-)
Avatar billede mach3 Nybegynder
26. januar 2005 - 15:27 #28
cf >> tak for forsøget.
Avatar billede mach3 Nybegynder
26. januar 2005 - 15:42 #29
jeg lukker herinde. jeg har fået et overblik over, hvordan jeg vil håndtere situationen.

takker.

arne_v
cf
-->
giv et svar
Avatar billede arne_v Ekspert
26. januar 2005 - 15:45 #30
ok
Avatar billede burningice Nybegynder
26. januar 2005 - 15:46 #31
:) svar
Avatar billede hnteknik Novice
26. januar 2005 - 18:12 #32
Hm - jeg er vist lidt sent ude. Min Craig larman er også fra 98. Fasndt vi nogensinde ud af, hvad proggie, der skulle bruges til at tegne diverse diagrammer op i. Klassediagrammer etc. Man kan vel snyde med et JAVA ditto, men findes der noget i VS.net til Csharp ?

mach3> jeg har lavet en webapplikation og er nu i gang med at dokumentere den.
Er det ikke det omvendte af OOAD ;-)

Henrik
Avatar billede mach3 Nybegynder
26. januar 2005 - 18:22 #33
hnteknik >>

Jeg er ikke startet fra bunden af, jeg har løbende dokumenteret. Fx lavede jeg use cases meget tidligt i forløbet :-)
Avatar billede arne_v Ekspert
26. januar 2005 - 18:39 #34
cf>

Det må være http://www.eksperten.dk/spm/555801 du tænker på.

Men det var faktisk også mach3 som stillede det spørgsmål.
Avatar billede burningice Nybegynder
26. januar 2005 - 19:00 #35
arne>> nemlig.. hehe.. ja, det har du da ret i. selv tilbage dengang var mach3 på banen ;)
Avatar billede mach3 Nybegynder
26. januar 2005 - 19:01 #36
hehe :-)
Avatar billede hnteknik Novice
26. januar 2005 - 19:15 #37
Jaja - godt ord igen. Er du igang med et eksamensprojekt?
Avatar billede mach3 Nybegynder
26. januar 2005 - 21:07 #38
hnteknik >> godt gættet :-)
Avatar billede hnteknik Novice
26. januar 2005 - 21:39 #39
Var selv igennem møllen på IT diplom. Den gang var der kun java og C++
Avatar billede mach3 Nybegynder
27. januar 2005 - 23:54 #40
eksamensprojekt er det dog ikke - det er snarere et midtvejsprojekt :-)
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