Sans trop en dire, je crée un objet qui a 9 attributs. Prenons un RPG par exemple.
force de flottement, constitution, courage, dextérité, intelligence, charisme, sagesse, volonté, perception;
Étant donné que l'objet est appelé joueur , le constructeur de
public Player(float strength, float constitution, float fortitude, float dexterity,
float intelligence, float charisma, float wisdom, float willpower, float perception){}
Selon SonarLint: "Constructor a 9 paramètres, ce qui est supérieur à 7 autorisés."
Bien que je sache que SonarLint dit que cela n'arrêtera pas le code de fonctionner réellement, s'il existe une manière "appropriée" de gérer ces situations , J'aimerais beaucoup le savoir!
Merci
Ps, si ce n'est pas le bon forum pour une telle question, veuillez me diriger vers le bon!
p>
4 Réponses :
Essayez d'utiliser Builder Pattern, cette méthode est très bonne pour les classes avec plus de 4 paramètres.
Idéalement, vous diviseriez la classe en unités plus petites et composeriez.
Dans ce cas, comme ils semblent tous être du même genre de chose, une Map (en particulier EnumMap ) semble être approprié.
En dernier recours, il y a le modèle Builder.
Player player = Player.builder()
.strength( )
.constitution( )
// ...
.perception( );
Un EnumMap est la meilleure solution dans ce cas particulier.
Essayez le modèle de générateur
final class Player {
private final float strength;
...
static final class Builder {
private float strength;
...
Builder setStrength(float strength) {
this.strength = strength;
return this;
}
...
Player build() {
return new Player(this);
}
}
private Player(Builder builder) {
strength = builder.strength;
...
}
...
public static void main(String[] args) {
Player player = new Player.Builder()
.setStrength(18)
.setConsitution(18)
.setFortitude(18)
.build();
}
}
Il n'est jamais conseillé et une manière correcte de définir une fonction qui a autant d'arguments.Idéalement, elle ne devrait avoir que 2 à 3 paramètres.Si il y a plus de paramètres spécifiés, vous pouvez faire l'une des choses ci-dessous.
Lisez le livre nommé comme code propre, il a tellement de choses pour les techniques de codage appropriées.
Par Robert Cecil Martin?
@MJDeveloping Oui - Oncle Bob .
stackoverflow.com/questions/58060511/…
Merci pour les réponses à ce jour. Je vais chercher le modèle Builder et 'EnumMaps' comme suggéré. Après avoir décidé celle qui convient le mieux à ma situation, j'accepterai la meilleure réponse!
Si vous n'utilisez pas de
EnumMap, vous le regretterez lorsque vous commencerez à ajouter plus de fonctionnalités à cette classe.