Vedi il codice qui sotto, che è un metodo di fabbrica in un modello di dominio ricco (livello dominio). Ci sono due cose che non mi piacciono:
public class SalesPersonOfferFactory (Applicant applicant)
{
if (applicant.Age > 30 && applicant.Employed = true)
{
return new PersonOffer (52, applicant.id)
}
else if (applicant.Age < 30 && applicant.Employed = true)
{
return new PersonOffer (164, applicant.id)
}
else if (applicant.Age > 30 && applicant.Employed = false)
{
return new PersonOffer (196, applicant.id)
}
else if (applicant.Age < 30 && applicant.Employed = false)
{
return new PersonOffer (242, applicant.id)
}
}
PersonOffer accetta un OfferID e ApplicantID (rilevante per il database).
La preoccupazione che ho è che il livello del dominio deve conoscere i numeri ID dal database, cioè deve sapere che OfferID 52 è rilevante se il richiedente ha più di 30 anni ed è impiegato e deve sapere che l'offerta 164 è rilevante se il richiedente ha meno di 30 anni ed è occupato ecc.
Capisco che sto pensando a questo in modo errato. Come posso creare oggetti business nel livello dominio che richiedono la mappatura al livello dati? C'è uno schema per questo?
Sarebbe normale utilizzare le chiavi naturali che descrivono l'offerta, ad es. 52 è: PremierCard quindi direbbe:
if (applicant.Age > 30 && applicant.Employed = true)
{
return new PersonOffer ('PremierCard', applicant.id)
}
Ci deve essere un modo migliore per farlo.