witam, piszę małą aplikacje do zarządzania klientami w supermarkecie. chciałbym się dowiedzieć, czy to podejście, które stosuje jest w miarę zgodne z zasadami, wzorcami panującymi w OOP.
public interface IProdukt
{
decimal Cena
{
get;
}
}
public class ProduktSpozywczy : IProdukt
{
public string Nazwa {get; set;}
public decimal Cena {get; set;}
}
public class ArtykulChemiczny : IProdukt
{
public string Nazwa {get; set;}
public decimal Cena {get; set;}
}
public class Klient
{
public int IdKlienta { get; set; }
public Koszyk koszyk;
public Klient (int id)
{
IdKlienta = id;
koszyk = new Koszyk();
}
}
public class Koszyk
{
public Koszyk()
{
stos = new Stack<IProdukt>();
}
private Stack<IProdukt> _stos;
private decimal _doZaplaty;
public decimal DoZaplaty {
get { return _doZaplaty; }
set {_doZaplaty = value; }
}
public Stack<IProdukt> stos
{
get { return _stos;}
set { _stos = value; }
}
public void DodajProdukt(IProdukt p)
{
DoZaplaty += p.Cena;
stos.Push(p);
Console.WriteLine("Produkt dodany do koszyka");
Console.WriteLine("Aktuanie do zaplaty: " + DoZaplaty);
}
public void WyjmijProdukt()
{
var x = stos.Pop();
DoZaplaty -= x.Cena;
Console.WriteLine("Produkt wyjety z koszyka");
Console.WriteLine("Aktualnie do zaplaty: " + DoZaplaty);
}
}
public class Program
{
static void Main(string[] args)
{
ProduktSpozywczy p = new ProduktSpozywczy { Cena = 100, Nazwa = "Bułka" };
ArtykulChemiczny a = new ArtykulChemiczny { Cena = 50, Nazwa = "Proszek do prania" };
Klient k = new Klient(1);
k.koszyk.DodajProdukt(p);
k.koszyk.DodajProdukt(a);
k.koszyk.WyjmijProdukt();
Console.ReadKey();
}
}
W programie chodzi o to, że klient wchodząc do sklepu od razu bierze koszyk. I tutaj moje pytanie, czy dobrze to zrobiłem tworząc pole koszyk w klasie Klient i inicjując ten koszyk w konstruktorze klasy. Oraz czy takie odwoływanie się do koszyka przez klienta jak jest w głównym programie jest poprawne.
Dziękuje za odpowiedź