mio punto di vista
diciamo se hai usato l'ereditarietà. Per un periodo si hanno nuovi attributi comuni solo a Azione e Numero ma non Rischio. Come gestirai questo? Se li metti sotto genitore, il rischio eredita roba che è irrilevante (principio di sottotitolazione di Liskov che bussa?). Se metti separatamente in Azione e Rischio allora stai violando DRY, il motivo iniziale per cui hai iniziato l'ereditarietà. Il punto è Inhertence per il riutilizzo è cattivo. Se non c'è "is-a" allora meglio non usarlo e quando si è in dubbio non esiste un vero "is-a".
La mia preferenza
Non ci sono altri modi di raggiungere DRY come mostrato in seguito esempio di codice.Con questa aggiunta di nuove proprietà il mio è un altro Comune2, l'aggiunta di nuovo comportamento è nuovo Comportamento comune se non sono applicabili a tutte e 3 le classi; se sono poi basta cambiare esistente comune e CommonBehavior
public class Common implements CommonBehavior
{
String Description;
String title;
public void f() {}
}
public interface CommonBehavior
{
void f();
}
public class Action implements CommonBehavior
{
private Common delegate;
pubic void f()
{
delegate.f();
}
}
Vedi anche la mia risposta a una domanda simile con un altro esempio pratico Design pattern to add a new class
fonte
2010-12-30 20:39:35
Grazie per il lancio in delegazione e la buona presentazione. Cosa ne pensi del contrario (vedi oltre, Attività -> Argomento). La domanda è: la "data di scadenza" è realmente parte di Action (la tua delega) o un artefatto del flusso di lavoro che svolge un ruolo non all'interno dell'azione, solo nel contesto del flusso di lavoro che incorpora. – mtraut
Grazie per aver mostrato Delegato in modo così chiaro. Quello che ho per azione, problema e rischio è davvero un insieme di comportamenti comuni. L'utilizzo dell'approccio delegato renderà molto più chiaro il funzionamento delle classi durante la lettura dell'inizio del codice. Prendendo esempio di "Attività" sotto, l'Azione può essere un compito ma il Rischio no. L'intenzione delle classi diventa molto chiara quando Action è ora: "Action implements CommonBehaviour, Task, MeetingIem", dove Risk è: "Risk implements CommonBehaviour, MeetingItem". – poulenc
Sono contento che tu l'abbia capito. Suggerisco anche di passare la mia risposta qui a una domanda simile http://stackoverflow.com/questions/4512184/design-pattern-to-add-a-new-class/4512234#4512234 –