Avatar billede websam Nybegynder
10. april 2006 - 18:50 Der er 13 kommentarer og
1 løsning

Info klasse med mange fields ?

Hejsa,

Jeg har en info klasse med mere end 40 fields der ikke alle bruges hele tiden. I et tilfælde bruger jeg 8 i et andet 23 osv. men når jeg så skal lave mine default constructor skal jeg have alle fields representeret hvilket ikke er optimalt, set i lyset af at jeg ikke skal bruge dem alle.

Hvad kan jeg gøre for at løse dette ?

/Websam
Avatar billede arne_v Ekspert
10. april 2006 - 19:30 #1
Din formulering antyder lidt at maaske skal du ikke bruge samme klasse
til alle objekter ...

Muligheder:
  - split i uafhaengige klasser hvis de intet har med hinanden at goere
  - split i faelles basis klasse og sub klasser hvis de delvist har noget med
    hinanden at goere
  - behold en eneklt klasse og brug null hvsi det er samme data, bare meget
  "tyndt" udfyldt
Avatar billede arne_v Ekspert
10. april 2006 - 19:31 #2
Muligvis skal du traede et skridt tilbage fra koden og kigge lidt
paa den virkelighed du forsoeger at modellere - hvordan er sammenhaengen der - og
saa forsoege at modellere den i koden
Avatar billede websam Nybegynder
10. april 2006 - 21:03 #3
Det har (i min verden) noget med hinanden at gøre, set i lyset af at jeg skal lave noget hvor jeg har flere ens fields, lad mig illustrere :

Public Sub New()
  MyClass.New(field1, field2, field3)
End Sub

Public Sub New()
  MyClass.New(field1, field2, field3, field4, field5, field6)
End Sub

Og så fremdeles, som du kan se har jeg brug for nogle fields flere gange og andre en gang.

Men når jeg tænker lidt over det kan jeg så ikke bare benytte mig 2 constructors en med default values og en med values fra mine fields og så bruge mine fields i min code-behind med følgende :

Dim objInfo As New InfoKlasse()
objInfo.field1 = "en value"
objInfo.field2 = "en anden value"

?
Avatar billede websam Nybegynder
10. april 2006 - 21:10 #4
Eller måske have noget i stil med :

Public Sub New(Byval val1 As Integer, _
              Byval val2 As String, _
              Byval val3 As String)
  _field1 = val1
  _field2 = val2
  _field3 = val3
End Sub

Public Sub New(Byval val1 As Integer, _
              Byval val2 As String, _
              Byval val3 As String, _
              Byval val4 As Integer, _
              Byval val5 As String, _
              Byval val6 As String)
  _field1 = val1
  _field2 = val2
  _field3 = val3
  _field1 = val4
  _field2 = val5
  _field3 = val6
End Sub

og så droppe den sub med default values ?
Avatar billede arne_v Ekspert
10. april 2006 - 21:37 #5
en New uden argumenter er ikke et absolut must i alle sammenhaenge
Avatar billede websam Nybegynder
10. april 2006 - 21:41 #6
Ok, men så vil den sidste løsning vel oxo være den bedste lige i dette tilfælde ?

De felter i databasen der så ikke bruges i de forskellige tilfælde behandles jo bare som NULL eller en given default value.
Avatar billede arne_v Ekspert
11. april 2006 - 04:22 #7
ja, men jeg er bare stadig noget i tvivl om din objekt model er korrekt
Avatar billede websam Nybegynder
11. april 2006 - 23:19 #8
Jeg tror ikke jeg er helt med på hvad du mener ?

Men efter at have tænkt lidt over det kan jeg vel simpet bare lave én default constructor der sætter en default value på mine fields :

Public Sub New()
    _F1 = 0
    _F2 = ""
    _F3 = ""
    _F4 = New DateTime(2000, 1, 1)
    ........ect
End Sub

og så sætte values på de fields jeg skal bruge i den givne situation, men jeg er ikke helt sikker på at dette er optimalt ?

/Websam
Avatar billede websam Nybegynder
11. april 2006 - 23:22 #9
Og så evt. en constructor med parameter :

Public Sub New(Byval Id As Integer)
    _F1 = Id
    _F2 = Property2
    _F3 = Property3
    _F4 = Property4
    ........ect
End Sub

/Websam
Avatar billede arne_v Ekspert
12. april 2006 - 04:02 #10
det kan man sagtens

----

jer er stadig lidt i tvivl om hvorvidt du kun skal have en klasse eller den
skal splittes i flere
Avatar billede websam Nybegynder
12. april 2006 - 09:51 #11
Jamen hvis jeg splitter den op i flere får jeg jo blot gentagelser af flere af mine fields hvilket jeg ikke ser nogen grund til at spille tid på, men ret mig hvis jeg tager fejl ?

/Websam
Avatar billede websam Nybegynder
12. april 2006 - 09:53 #12
Det er en helt anden snak hvis vi taler om at det var forskellige fields der skulle bruges men det er det ikke lige i dette tilfælde.

/Websam
Avatar billede websam Nybegynder
02. juni 2006 - 13:29 #13
lukketid
Avatar billede arne_v Ekspert
03. juni 2006 - 01:25 #14
ja - du lukker bare - jeg så aldrig lyset
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