Alors qu'il n'existe pas de lignes directrices officielles" j'ai suivi le principe de la BAISER et de la SEC. Faire des constructeurs surchargés aussi simple que possible, et de la façon la plus simple est qu'elle ne fait appel de cette(...). De cette façon, vous avez uniquement besoin de vérifier et de gérer les paramètres une fois et une seule fois.
public class Simple {
public Simple() {
this(null);
}
public Simple(Resource r) {
this(r, null);
}
public Simple(Resource r1, Resource r2) {
// Guard statements, initialize resources or throw exceptions if
// the resources are wrong
if (r1 == null) {
r1 = new Resource();
}
if (r2 == null) {
r2 = new Resource();
}
// do whatever with resources
}
}
À partir d'un test d'unité de point de vue, il deviendra facile de tester la classe puisque vous pouvez mettre dans les ressources en elle. Si la classe possède de nombreuses ressources (ou des collaborateurs comme certains OO-geeks), pensez à l'une de ces deux choses:
Faire un paramètre de classe
public class SimpleParams {
Resource r1;
Resource r2;
// Imagine there are setters and getters here but I'm too lazy
// to write it out. you can make it the parameter class
// "immutable" if you don't have setters and only set the
// resources through the SimpleParams constructor
}
Le constructeur Simples que les besoins de diviser l' SimpleParams
paramètre:
public Simple(SimpleParams params) {
this(params.getR1(), params.getR2());
}
...ou SimpleParams
d'un attribut:
public Simple(Resource r1, Resource r2) {
this(new SimpleParams(r1, r2));
}
public Simple(SimpleParams params) {
this.params = params;
}
Faire une classe factory
Faire une usine de classe qui initialise les ressources pour vous, ce qui est favorable si l'initialisation de ressources est un peu difficile:
public interface ResourceFactory {
public Resource createR1();
public Resource createR2();
}
Le constructeur est alors fait de la même manière qu'avec le paramètre de la classe:
public Simple(ResourceFactory factory) {
this(factory.createR1(), factory.createR2());
}
Faire une combinaison des deux
Oui... vous pouvez mélanger et faire correspondre les deux façons selon ce qui est plus facile pour vous à l'époque. Paramètre classes et simple de l'usine de classes sont à peu près la même chose compte tenu de l' Simple
de la classe qu'ils sont utilisés de la même manière.