Ho questo problema: Class1
e Class2
sono dello stesso tipo Base
. Rappresentano lo stesso concetto ma con un'implementazione leggermente diversa. Se li modifico "nel modo giusto" in Java, avrei qualcosa del genere:
abstract class Base{
public int id;
public abstract void someLogic();
}
class Class1 extends Base{
List<Content> contents;
@Override
public void someLogic() {}
}
class Class2 extends Base{
public Map<CategoryId, Category> categoryMap;
@Override
public void someLogic() {}
}
class CategoryId{
int id;
}
class Category{
CategoryId id;
List<Content> contents;
}
class Content{
}
Il problema con questo design è che ho più classi da mantenere rispetto al seguente approccio:
class Base{
public int id;
//WE KNOW IT IS Class1 IF CategoryId==null
public Map<CategoryId, Category> categoryMap;
public void someLogic(){}
}
class CategoryId{
int id;
}
class Category{
CategoryId id; //WILL ALWAYS BE NULL IF IN Class1 Map
List<Content> contents;
}
class Content{
}
Nell'approccio successivo, in realtà ho CategoryId
sempre null
per Class1
caso e per Class2
caso è istanza effettiva di CategoryId
. Questo è probabilmente più illeggibile e incomprensibile, ma mantiene il codice più pulito.
Quale design è migliore? Qualche altra implementazione (alternativa)? Grazie.