rhdf skrev:
Jo min 'Product' har ju egenskaperna Model och Colour, men i just denna context så är det ju själva produktinformationen man vill åt, när kunden sedan väl valt färg och modell så vill man ju kunna visa detta på ett enklare sätt i tex varukorgen
Produkt134, lagomstor, blå 1 st ..
Jo det blir nog nån form av ajax-lösning för att hämta fram modeller/färger/bilder i det här läget egentligen skulle det optimala kanska vara att hämta ut alla varianter och sen hantera allt på klientsidan med js och endast ha en validering serverside
Ofta när jag använder mig av DDD så brukar inte modellen bli den perfekta för presentation, så jag brukar använda mig av en specifik modell för presentation. Jag brukar säga att det är en "variant" av Presentation Model. Sedan när AJAX kommer in i bilden så kan val av design variera från vad man önskade. Så ibland är det helt ok att hålla sig till KISS (Keep it simple stupid). Eftersom färgen på en produkt styrs av modellen så skulle jag koppla samman modell och färg, och inte ha två egenskaper på Produkt, alltså inte Product.Colors, Product.Models.. utan Product.Models bara. Om dina produkter via ett givet context behöver en relation till andra produkter, så skulle jag ev överväga att ha med en egenskap så som RelatedProducts på min specifika context Product klass. Sedan köra med load span. Ev KISS och begära relaterade produkter via ett API, beror på hur och när RelatedOProducts kommer användas.. är det ofta >60%, så skulle jag nog valt en egenskap på Product.. om mindre, ladda dom "on demand" via ett API.
Skulle jag bara visa en produkt och dess modeller och färger,tex när jag ska välja en produkt som jag kan läggas ner i en kundvang, så skulle jag ev idag valt AJAX och hämtat modeller och färger separat via en WCF, Page Method eller WebService (OBS! Om det bara är en vy i min app som är intreserad av att visa modeller och färger).. eller om jag skulle visa flera produkter åt gången och kunna se modeller och färger i den vyn, så skulle jag laddat allt från början och använt DHTML, precis som du nämnde. Fördelen att använda en "Presentation Model" är att den speglar ditt UI och då kan du ladda all den data som ska till vyn och fylla din presentations modell. Jag kör ofta med denna typ av lösning pga att min domän modell är inte anpassad efter ett specifikt UI, och det ska den inte vara.
Om du vill läsa om Bounded Context och varför det kan vara viktigt att ha flera varianter av en entitet baserat på dess context, så kan du ta en titt i Eric Evans bok Domain Driven Design under "Strategic Design". Kan ta ett exempel, om du tar en faktura, så är det ett "papper" som någon får. På detta har du tex Produkt ID, namn, antal och pris.. väldigt lite information. Det är inte en Produkt som ligger på fakturan, utan bara information som är uttagen för just fakturan. I detta fall "återanvänder" man oftast inte en Product entitet, utan skapar en ny för just det specifika context. Fakturahanteringen i en app kan också vara ett subsystem och varje subsystem har sin egna modell.
Sitter på flygplatsen nu, ska till Malmö om 5 min, återkommer senare med mer info när jag har landat och är redo för lite mer internet action ;)