Ho esaminato i modelli di First First Design (sono appena entrato di recente) e stavo leggendo il modello di strategia, e mi è venuto in mente che potrebbe essere un ottimo modo per implementare un modo comune di calcolo delle tasse ecc. su tutti gli oggetti particolari che uso al lavoro, ma ho avuto una domanda al riguardo.Aiuto con il modello di strategia
Ecco quello che stavo pensando:
public interface ITax
{
decimal ProvincialTaxRate { get; set; } // Yes, I'm Canadian :)
decimal CalculateTax(decimal subtotal);
}
public SaskatchewanTax
{
public decimal ProvincialTaxRate { get; set; }
public SaskatchewanTax()
{
ProvincialTaxRate = new decimal(0.05f);
}
public decimal CalculateTax(subtotal)
{
return ProvincialTaxRate * subtotal + FederalTaxRate * subtotal;
}
}
public OntarioTax
{
public decimal ProvincialTaxRate { get; set; }
public OntarioTax()
{
ProvincialTaxRate = new decimal(0.08f);
}
public decimal CalculateTax(decimal subtotal)
{
return ProvincialTaxRate * subtotal + FederalTaxRate * subtotal;
}
}
Avrete notato che non v'è alcuna dichiarazione di FederalTaxRate ed è quello che volevo chiedere. Dove dovrebbe andare?
- Passare al costruttore per ciascun calcestruzzo ITax sembra ridondante e consentirebbe un comportamento scorretto (tutti i calcolatori di imposte devono condividere la stessa identica aliquota fiscale federale).
- Allo stesso modo, la creazione di un membro di ITax consentirebbe loro di essere incoerenti.
È necessario che tutti i calcolatori fiscali ereditino da qualche altra classe in cui è definito sia staticamente che ITax?
public class TaxCalculator
{
public static decimal FederalTaxRate = new decimal(0.05f);
}
Questo può essere vero, ma non risponde alla domanda o non mi dà alcun tipo di utilizzo se non "apparentemente" prendendomi gioco di me. –
Modificato per rispondere a questo commento^ –
Poiché sembra che tu stia semplicemente imparando questi schemi, non dovresti prendere le critiche di qualcuno come un attacco personale. Cercherete in ogni occasione di utilizzare questi nuovi modelli in un primo momento e talvolta li abuserete come menzionato in questa risposta. Tutto parte del processo di apprendimento. –