Mi Perspectiva
digamos si has usado herencia. Durante un período tiene nuevos atributos que son comunes solo a Acción y Número pero no a Riesgo. ¿Cómo manejarás esto? Si los pones debajo de los padres, entonces Risk está heredando cosas que son irrelevantes (Liskov Substituon Principle knocking?). Si lo pones en Acción y Riesgo por separado, entonces estás rompiendo DRY, la razón inicial por la que comenzaste a heredar. El punto es Inhertence para reutilizar es malo. Si no hay "is-a", mejor no lo use y cuando tenga dudas, entonces no hay un verdadero "is-a".
mi preferencia
Hay otras maneras de lograr SECO como se muestra a continuación en el ejemplo de código.Con esta adición de nuevas propiedades, puede ser otro Common2, además del nuevo comportamiento CommonBehavior2 si no son aplicables a las 3 clases; si son entonces simplemente cambiar existente Común y 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();
}
}
También se fijan en mi respuesta a una pregunta similar con otro ejemplo práctico Design pattern to add a new class
Gracias por invitar a la delegación y la buena presentación. ¿Qué piensas al revés (ver más allá, Tarea -> Tema). La pregunta es si la "fecha de vencimiento" realmente es parte de Acción (su delegación) o un artefacto del flujo de trabajo que cumple una función no relacionada con la Acción, solo en la incrustación del contexto del flujo de trabajo. – mtraut
Gracias por mostrar Delegate tan claramente. Lo que tengo para Action, Issue and Risk es de hecho un conjunto de comportamientos comunes. El uso del enfoque delegado hará que el funcionamiento de las clases sea mucho más claro al leer el comienzo del código. Tomando el ejemplo de "Tarea" a continuación, Acción puede ser una tarea pero Riesgo no lo es. La intención de las clases se vuelve muy clara, ya que Action es ahora: "Action implementa CommonBehaviour, Task, MeetingIem", donde Risk is: "Risk implementa CommonBehaviour, MeetingItem". – poulenc
Me alegra que lo haya entendido. Le sugiero que también revise mi respuesta aquí a una pregunta similar http://stackoverflow.com/questions/4512184/design-pattern-to-add-a-new-class/4512234#4512234 –