Esempio tratto da: Sviluppo software agile: principi, modelli e pratiche
Un nuovo dipendente viene aggiunto dal ricevimento di una transazione AddEmp. Questa transazione contiene il dipendente nome, indirizzo e numero di impiegato assegnato. La transazione ha tre forme:
AddEmp <EmpID> "<name>" "<address>" H <hourly-rate>
AddEmp <EmpID> "<name>" "<address>" S <monthly-salary>
AddEmp <EmpID> "<name>" "<address>" C <monthly-salary> <commission-rate>
proposta classe di impiegati
Aggiungitransazionedipendente
Lamiadomandasarebbe"migliore" se invece di sottoclasse di AddEmployeeTransaction
avessimo una fabbrica per la classificazione salariale e il piano retributivo?
Se meglio è un termine troppo vago, quali sono gli svantaggi del mio design rispetto a quello proposto dallo zio Bob?
Diciamo dentro EmployeeTransaction
abbiamo SalaryClassificationFactory
e chiamiamo SalaryClassificationFactory.get(SalaryDetails d)
dove,
enum SalaryId{H,S,C};
struct hourly
{
int hourlyRate;
};
struct monthly
{
int monthlySalary;
};
struct commissioned
{
int salary;
int commisssionRate;
};
struct SalaryDetails
{
SalaryId kind;
union SalaryUnion
{
hourly h;
monthly s;
commissioned c;
}
};