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.