11. maj 2006 - 10:31Der er
20 kommentarer og 1 løsning
objekter til webshop
Jeg er i gang med at prøve at lege med en lille webshop - i første omgang kun selve business-logic delen da designet og backend er lige meget.
jeg har en nogenlunde idé om nogle af objekterne jeg skal bruge - men jeg har alligevel nogle problemer.
- Jeg har et objekt, der hedder "produkt" - det gør ikke meget andet end at indeholde en beskrivelse af mit produkt (pris, navn, beskrivelse)
- Jeg har et objekt, der hedder "katalog" - det indeholder alle mine produkter og kan skrives ud, jeg kan vælge ét specifikt produkt ud, jeg kan indsætte, opdatere og slette et produkt.
Så langt så godt tror jeg - kom gerne med kommentarer.
Mine produkter kan ligge både i nogle produktkategorier og de kan ligge i underkategorier til produktkategorierne (begge indeholder kun et id, et navn og et billedelink) og her er jeg lidt i tvivl om hvad jeg skal gøre - skal der laves objekter til produktkategorierne (fx kategorioversigt og kategori) og objekter til underkategorierne (fx underkategorioversigt og underkategori)? Eller skal det på en eller anden måde integreres som et del af mit katalog-objekt?
Hvordan skal min varekurv sættes op? skal den bare gemme vareid'er og antal eller?
Når der så laves en bestilling, som består af navn, adr osv hvordan gemmer jeg så varerne - for dér er et id og et tal jo ikke nok da fx priserne jo kan ændres løbende og det må jo ikke ændre gamle ordre?
Findes der nogle sider med sådanne generelle objekt-modeller?
Ang. kategorier: Der kunne du jo lade en Kategori indeholde en collection af andre kategorier, altså af egen objekttype. Dette giver dig så en mulighed for et kategori-system i x antal niveauer, og at kategorier kan være underkategorier i flere forskellige hovedkategorier.
Ang. at priserne skifter over tid på produkterne kan bl.a. løses ved at gemme den pris du har solgt en vare til sammen med din ordrelinje. Det kan også gøres ved at gemme alle ændringer i priserne sammen med dato. Så kan en pris slåes op på et produkt i forhold til tidspunktet. Ville dog nok bare gemme salgsprisen sammen med varelinjen.
kan du komme en smule nærmere ind på hvordan sådan en kategori-løsning kunne se ud så den var i flere niveauer - det kan jeg nemlig ikke helt gennemskue?
jeg er lidt i tvivl om hvorvidt jeg forstår det eller ej. Som jeg umiddelbart tolker det så er mit katalog og mit produkt allerede sat op ud fra composite pattern bortset fra at alle produkterne i bund og grund er ens.
Der hvor kunne være givtig er når katagori/underkategori skal opbygges da disse har mange ligheder men alligevel har én stor forskel. Nemlig om de er en hovedkategori eller en underkategori.
hvis mine tanker om dette ikke er helt skævt så er mit problem bare at få det bygget op for jeg er ikke helt med på de eksempler de giver.
Lige nu har jeg kun min produkt-klasse og min katalog-klasse - ikke særlig avanceret eller udbygget endnu (der mangler bla pris og opdeling i kategorier/underkategorier på produkterne og så skal dataene nok også caches på en eller anden måde og måske endda loades anderledes ind hvis der kommer mange produkter (lazyload tror jeg det hedder). Det jeg har ser sådan ud nu;
Public Class product
Sub New(ByVal var As Integer) _id = var End Sub
Private _id As Integer Public Property id() As Integer Get Return _id End Get Set(ByVal value As Integer) _id = value End Set End Property
Private _navn As String Public Property navn() As String Get Return _navn End Get Set(ByVal value As String) _navn = value End Set End Property
Private _beskrivelse As String Public Property beskrivelse() As String Get Return _beskrivelse End Get Set(ByVal value As String) _beskrivelse = value End Set End Property
End Class
Public Class katalog
Private _items As Collection(Of entry) Public ReadOnly Property Items() As Collection(Of entry) Get If _items Is Nothing Then
_items = New Collection(Of entry)
Dim dbconn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=" & HttpContext.Current.Server.MapPath("database/test.mdb")) Dim sql = "SELECT * FROM produkter" dbconn.Open() Dim dbcomm = New OleDbCommand(sql, dbconn) Dim dbread As OleDbDataReader = dbcomm.ExecuteReader() If dbread.HasRows Then Do While dbread.Read Dim b As entry = New entry(dbread(0)) b.navn = dbread(1) b.beskrivelse = dbread(2)
_items.Add(b)
Loop End If End If Return _items End Get
End Property
Public Function specific(ByVal Id As Integer) As entry For Each e As entry In Me.Items If e.id = Id Then Return e End If Next Return Nothing End Function
undskyld, det er kopieret fra en forkert fil. Dette er den rigtige katalog-klasse:
Public Class katalog
Private _items As Collection(Of product) Public ReadOnly Property Items() As Collection(Of product) Get If _items Is Nothing Then
_items = New Collection(Of product)
Dim dbconn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=" & HttpContext.Current.Server.MapPath("database/test.mdb")) Dim sql = "SELECT * FROM produkter" dbconn.Open() Dim dbcomm = New OleDbCommand(sql, dbconn) Dim dbread As OleDbDataReader = dbcomm.ExecuteReader() If dbread.HasRows Then Do While dbread.Read Dim b As product = New product(dbread(0)) b.navn = dbread(1) b.beskrivelse = dbread(2)
_items.Add(b)
Loop End If End If Return _items End Get
End Property
Public Function specific(ByVal Id As Integer) As product For Each e As product In Me.Items If e.id = Id Then Return e End If Next Return Nothing End Function
Som jeg tror det er så er der kun et niveau af kataloger - katalog og produkt gør og er det samme uanset hvad.
Til gengæld kunne det måske være at kategori/underkategori skal være på en anden måde netop fordi en kategori og en underkategori for så vidt er helt ens med den lille forskel altså at underkategorier hænger på en kategori. En kategori er en kategori og ikke mere.
Når nu jeg åbenbart ikke har forstået composite pattern - kan du så komme det en smule nærmere? eventuelt et lille eksempel?
det tror jeg bragte mig nærmere - så det jeg vel næsten skal i mit tilfælde er at lave en kategori med navn og billede og ud fra den skal jeg lave overkategori med angivelse af om der er underkategorier eller ej og så skal jeg lave underkategori som har angivelse af hvilken overkategori den tilhører?
så var min tanke om forståelsen af det ikke korrekt kan jeg se.
Det eneste kategori og produkt har til fælles er id og navn - er det så disse ting min basis klasse skal have? Hvis dette er korrekt, er underkategori så også en klasse der skal arve fra basis klassen eller er det måske ligefrem noget der skal arve fra kategori klassen så?
Du må undskylde jeg er lidt langsom til at forstå idéen i det :-(
hvis kategori og produkt kan indholdes i en kategori klasse så kan underkategori vel også?
Hvis jeg sætter pointene op til maks kan jeg så lokke dig til at give mig et lille eksempel på dette - for jeg har prøvet og vendt og drejet det men kan ikke helt komme frem til noget der for mig ser smart ud.
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.