Avatar billede unknown_someone Juniormester
11. maj 2006 - 10:31 Der 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?
Avatar billede ibleif Nybegynder
11. maj 2006 - 14:56 #1
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.

Det var bare lige hvad jeg tænkte... :-)

God fornøjelse med projektet.

// Ibleif
Avatar billede unknown_someone Juniormester
11. maj 2006 - 18:45 #2
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?
Avatar billede arne_v Ekspert
12. maj 2006 - 02:06 #3
lyder som noget der kunne bruges et composite pattern til

katalog = composite
produkt = leaf
Avatar billede unknown_someone Juniormester
12. maj 2006 - 11:21 #4
composite pattern? jeg er ked af at sige det men det siger mig ingenting det du skriver arne_v?
Avatar billede arne_v Ekspert
12. maj 2006 - 13:04 #5
Avatar billede unknown_someone Juniormester
15. maj 2006 - 14:42 #6
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.
Avatar billede arne_v Ekspert
16. maj 2006 - 04:30 #7
har du dine klasser ?
Avatar billede unknown_someone Juniormester
16. maj 2006 - 14:04 #8
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

    End Class
Avatar billede arne_v Ekspert
17. maj 2006 - 02:30 #9
der er ikke implementeret composite pattern i de klasser

og jeg kan ikke se hvordan produkt og entry hænger sammen
Avatar billede unknown_someone Juniormester
17. maj 2006 - 09:15 #10
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

    End Class
Avatar billede arne_v Ekspert
18. maj 2006 - 02:38 #11
det der virker fint hvis du kun har et niveay af kataloger

men hvis du har flere niveauer af kataloger så er det at du skal implementere
composite pattern
Avatar billede unknown_someone Juniormester
18. maj 2006 - 13:18 #12
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?
Avatar billede arne_v Ekspert
19. maj 2006 - 03:20 #13
Jeg lavede det her fo rnylig i en anden kontekst:

using System;
using System.Collections;

namespace E
{
    public abstract class OpbevaringsSted
    {
        protected string navn;
        public OpbevaringsSted(string navn)
        {
            this.navn = navn;
        }
        public abstract void LedEfterPenge();
    }
    public class Kuffert : OpbevaringsSted
    {
        private ArrayList indhold;
        public Kuffert(string navn) : base(navn)
        {
            indhold = new ArrayList();
        }
        public void Add(OpbevaringsSted o)
        {
            indhold.Add(o);
        }
        public override void LedEfterPenge()
        {
            foreach(OpbevaringsSted o in indhold)
            {
                o.LedEfterPenge();
            }
        }
    }
    public class Tegnebog : OpbevaringsSted
    {
        private decimal penge;
        public Tegnebog(string navn, decimal penge) : base(navn)
        {
            this.penge = penge;
        }
        public override void LedEfterPenge()
        {
            if(penge > 0)
            {
                Console.WriteLine("Fandt " + penge + " kr. i " + navn);
            }
        }
    }
    public class MainClass
    {
        public static void Main(string[] args)
        {
            Tegnebog sort = new Tegnebog("sort tegnebog", 250.00m);
            Tegnebog brun = new Tegnebog("brun tegnebog", 0.00m);
            Kuffert lille = new Kuffert("lille kuffert");
            Kuffert stor = new Kuffert("stor kuffert");
            lille.Add(sort);
            stor.Add(lille);
            stor.Add(brun);
            stor.LedEfterPenge();
        }
    }
}
Avatar billede arne_v Ekspert
19. maj 2006 - 03:21 #14
det er så C# og ikke VB.NET, men du bør kunne følge logikken
Avatar billede unknown_someone Juniormester
21. maj 2006 - 10:54 #15
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?
Avatar billede arne_v Ekspert
22. maj 2006 - 02:57 #16
kategori og produkt skal arve fra en fælles basis klasse

du kan godt lave en reference til parent i begge klasser
Avatar billede unknown_someone Juniormester
22. maj 2006 - 21:15 #17
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 :-(
Avatar billede arne_v Ekspert
23. maj 2006 - 02:53 #18
dine kategori og produkt klasser har noget mere til fælles: de kan begge
indeholdes i en kategori klasse
Avatar billede unknown_someone Juniormester
01. juni 2006 - 20:13 #19
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.
Avatar billede unknown_someone Juniormester
10. juni 2006 - 19:09 #20
nå - det var nok at gå for langt i mit spørgsmål. Jeg lader "projektet" ligge lidt endnu og forsøger at læse videre på det.

Alle må gerne lægge et svar.
Avatar billede unknown_someone Juniormester
05. september 2006 - 13:03 #21
sidste chance for at lægge et svar.
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