111 votes

Les classes d'utilité publique sont-elles diaboliques ?

J'ai vu cette question : Si une classe "Utilities" est mauvaise, où dois-je mettre mon code générique ?

Et je me suis dit : pourquoi les classes d'utilité sont-elles mauvaises ?

Supposons que j'aie un modèle de domaine comportant des dizaines de classes. J'ai besoin de pouvoir xml-ifier les instances. Dois-je créer une méthode toXml sur le parent ? Dois-je créer une classe d'aide MyDomainXmlUtility.toXml ? Il s'agit d'un cas où le besoin métier s'étend à l'ensemble du modèle de domaine - est-ce vraiment une méthode d'instance ? Qu'en est-il s'il y a un tas de méthodes auxiliaires sur la fonctionnalité XML de l'application ?

2voto

Sridhar-Sarnobat Points 965

La plupart des cours d'utilitaires sont mauvais parce que :

  1. Ils élargissent le champ d'application des méthodes. Ils rendent public un code qui serait autrement privé. Si la méthode util est utilisée par plusieurs appelants dans des classes distinctes et qu'elle est stable (c'est-à-dire qu'elle n'a pas besoin d'être mise à jour), il est préférable, à mon avis, de copier et de coller des méthodes d'aide privées dans la classe appelante. Une fois que vous l'exposez en tant qu'API, il est plus difficile de comprendre quel est le point d'entrée public d'un composant jar (vous maintenez une structure arborescente appelée hiérarchie avec un parent par méthode. Il est ainsi plus facile de séparer mentalement les composants, ce qui est plus difficile lorsque des méthodes sont appelées à partir de plusieurs méthodes parentes).
  2. Elles aboutissent à un code mort. Les méthodes utilitaires deviennent inutilisées au fur et à mesure de l'évolution de votre application et vous vous retrouvez avec du code inutilisé qui pollue votre base de code. Si la méthode était restée privée, le compilateur vous aurait dit qu'elle était inutilisée et vous auriez pu la supprimer (le meilleur code est de ne pas avoir de code du tout). Une fois que vous avez rendu une telle méthode non privée, votre ordinateur sera impuissant à vous aider à supprimer le code inutilisé. Il peut être appelé à partir d'un fichier jar différent pour ce que l'ordinateur en sait.

Il existe des analogies entre les bibliothèques statiques et les bibliothèques dynamiques.

1voto

Marc T Points 11

Avec Java 8, vous pouvez utiliser des méthodes statiques dans les interfaces ... problème résolu.

0voto

Mr. White Points 13

Lorsque je ne peux pas ajouter une méthode à une classe (disons, Account est verrouillé contre les changements par les développeurs juniors), j'ajoute simplement quelques méthodes statiques à ma classe Utilities comme suit :

public static int method01_Account(Object o, String... args) {
    Account acc = (Account)o;
    ...
    return acc.getInt();
}

0voto

Sid J Points 33

Les classes d'utilité ne sont pas toujours mauvaises. Mais elles ne doivent contenir que les méthodes communes à un large éventail de fonctionnalités. Si certaines méthodes ne sont utilisables que dans un nombre limité de classes, il convient d'envisager la création d'une classe abstraite en tant que parent commun et d'y placer les méthodes en question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X