Pour l'utilisation dans une application basée sur les servlets, j'ai écrit une classe pour stocker un nom de vue et des objets à rendre. En fait, il s'agit plus d'une structure de données que d'une classe au sens de la POO. Je me demande si je devrais exposer les membres ou si je devrais utiliser des getters.Exposer membres dans une structure de données comme classe?
public class Result {
private final int status;
private final String view;
private final Map<String, Object> model = new HashMap<String, Object>();
public Result(final int status, final String view) {
this.status = status;
this.view = view;
}
public Result put(final String modelName, final Object modelObject) {
model.put(modelName, modelObject);
return this;
}
}
Dois-je ajouter getStatus(), getView() et getModel() ou devrais-je changer la visibilité des membres au "public"? À l'heure actuelle, je ne connais aucun scénario où il serait utile d'avoir une méthode pour accéder à un membre. "Résultat" est une structure de données immuable et aucun calcul n'est nécessaire lorsque les membres sont accédés. Souhaitez-vous ajouter des getters pour l'événement improbable que l'implémentation change?
Addendum
J'ai lu une section relative à ma question à Robert C. Martins excellent livre Clean Code (page 99):
Hybrids
Cette confusion [au sujet des objets et les structures de données] conduisent parfois à structures hybrides malheureuses qui sont moitié objet et la moitié st structure. Ils ont des fonctions qui font choses importantes, et ils ont aussi soit des variables publiques ou publiques accesseurs et mutateurs que, pour toutes fins utiles, rendre public la variable privée, tentant autres fonctions externes à utiliser ces les variables la façon dont un programme procédural utiliserait une structure de données. De tels hybrides compliquent l'ajout de nouvelles fonctions , mais compliquent également l'ajout de nouvelles structures de données pour . Ils sont les pire des deux mondes. Évitez de créer eux. Ils sont indicatifs de la conception confuse dont les auteurs ne sont pas sûr de - ou pire, ignorant de - si elles ont besoin de protection contre les fonctions ou types.
Dupliquer: http://stackoverflow.com/questions/1949351/benefits-of-getter-setter-vs-public-vars –