rhdf skrev:
Borde jag ändra här och ha en basklass som både "shop-produkt" och "orderItem" ärver ifrån ?
Det har visat sig att den generella "Produkt" jag har ibland kräver lite extra properties vid olika tillfällen, tex en shop vill ha med ett extra infofält, medans nästa vill ha med tillverkare+ namn+modell i separata fält osv
Innan jag svarar på citatet här så tänkte jag bara ta upp detta med namn.
Namnen i sin applikation skall helst heta det kunden pratar om. Och innehålla just det kunden refererar till. Såg att du kalla din typ BLL eller DAL komponent för Products. Det är inget fel på detta, dock tror jag du kommer till ett läge då detta namn har en annan betydelse och på så vis blir vilseledande.
Jag gillar DDD (Domän Driven Design) mkt för just hur man skall tänka och även ta del av de typ notationer som finns där för olika klassers ändamål.
Jag gillar inte ord som BLL eller DAL det får mig att rysa... :-)
Eniteter är typ de databärande klasserna, dessa bör ha namn som speglar det kunden pratar om. Ex Product, Order etc... Dessa entiteter får gärna ha businesslogik i sig. MEN OBS! när jag säger businesslogik här menar jag saker som mer eller mindre bara hanterar entiteten och eller dess aggregats tillståndsdata. Dvs man pratar aldrig mot andra klasser så som service klasser, dataaccess klasser m.m.
Businesslogik som kräver att man måste göra detta lägger man helst i så kallade service klasser. De brukar oftast vara en tjänstehanterare av en entiteter typ.
För datahämtning och lagring använder man Repositories. Dessa kan ses lite som typ DAL fast ändå inte. Deras uppgift är att ge dig fyllda entiteter och eller hantera hur dina entiteter sparas mot datakälla. De metoder dessa skall ha är mer eller mindre motsvarande where satser typ. Lite som du gjort.
GetProductByID(....), GetProductByCategory(....) etc...
Det är i dessa du exempelvis kan använda ORM om du vill och eller manuell mappning. Med manuell mappning menar jag typ att du använder SQLDataReader för hämta datat och skriver koden själv för att mappa datat mot den/de entiteter du vill returnera.
Så nu till citatet eller dina frågor.
Ex ShoppingCart och Order kan kanske ha likasinnade properties, men bara för det tycker jag inte man skall ärva en gemensam basklass av många skäl. Men för att inte gå in på dem för tekniskt så är det så att dessa två saker är faktiskt två olika saker i ens domän. Arv här är bekvämt men fel bekvämlighet då det istället skapar andra problem. Dvs businesslogiken kan skilja, en ShoppingCart är inte en Order, dock blir den till en Order.
I OO skall helst arv användas i is förhållanden. Ex. Teacher is Employee
Mvh Johan