Welche guten Richtlinien sollten Sie beim Schreiben von Utility-Klassen in Java beachten?
Sollten Pakete "util" oder "utils" sein? Ist es ClassUtil oder ClassUtils? Wann ist eine Klasse ein "Helfer" oder ein "Dienstprogramm"? Dienstprogramm oder Dienstprogramme? Oder verwenden Sie eine Mischung aus ihnen?
Die Standard-Java-Bibliothek verwendet sowohl Utils als auch Utilities:
- javax.swing.Utilities
- javax.print.attribute.AttributeSetUtilities
- javax.swing.plaf.basic.BasicGraphicsUtils
Apache verwendet eine Vielzahl von Util und Utils, obwohl meistens Utils:
- org.apache.commons.modeler.util.DomUtil
- org.apache.commons.modeler.util.IntrospectionUtils
- org.apache.commons.io.FileSystemUtils
- org.apache.lucene.wordnet.AnalyzerUtil
- org.apache.lucene.util.ArrayUtil
- org.apache.lucene.xmlparser.DOMUtils
Spring verwendet viele Helper- und Utils-Klassen:
- org.springframework.web.util.UrlPathHelper
- org.springframework.core.ReflectiveVisitorHelper
- org.springframework.core.NestedExceptionUtils
- org.springframework.util.NumberUtils
Wie benennen Sie Ihre Dienstprogrammklassen?
Hierfür gibt es in der Java-Welt keine Standardregel / -konvention. Ich bevorzuge es jedoch, "s" am Ende des Klassennamens hinzuzufügen, wie @colinD erwähnt hat.
Das scheint ziemlich normal zu sein, was der Master-Java-API-Designer Josh Bloch tut (Java-Sammlung sowie Google-Sammlung).
Solange Helper und Util verfügbar sind, werde ich etwas als Helper bezeichnen, wenn es APIs enthält, mit denen eine bestimmte Funktionalität eines Pakets erreicht werden kann (unter Berücksichtigung eines Pakets zur Implementierung eines Moduls). In der Zwischenzeit kann ein Util in jedem Kontext aufgerufen werden.
In einer Anwendung, die sich auf Bankkonten bezieht, werden beispielsweise alle nummernspezifischen statischen Dienstprogramm-APIs aufgerufen
org.mycompany.util.Numbers
Alle "Account" -spezifischen Geschäftsregeln, die APIs unterstützen, werden aufgerufen
Schließlich geht es darum, eine bessere Dokumentation und saubereren Code bereitzustellen.
quelle
Ich mag die Konvention, dem Typnamen nur "s" hinzuzufügen, wenn der Typ eine Schnittstelle oder eine Klasse ist, die Sie nicht steuern. Beispiele hierfür im JDK sind
Collections
undExecutors
. Dies ist auch die in Google-Sammlungen verwendete Konvention.Wenn Sie mit einer Klasse arbeiten, über die Sie die Kontrolle haben, würde ich sagen, dass Dienstprogrammmethoden im Allgemeinen zur Klasse selbst gehören.
quelle
Ich denke, dass 'utils' der Paketname sein sollte. Die Klassennamen sollten den Zweck der darin enthaltenen Logik angeben. Das Hinzufügen der sufix -util (s) ist redundant.
quelle
tld.organization.app.util
Paket sollte nicht existieren (könnte, sollte aber nicht), eine beliebige Anzahl vontld.organization.app.feature.util
Paketen ist vollkommen in Ordnung.Ich bin mir ziemlich sicher, dass die Wörter "Helfer" und "Dienstprogramme" synonym verwendet werden. Nach den von Ihnen angegebenen Beispielen zu urteilen, würde ich sagen, wenn Ihr Klassenname eine Abkürzung ist (oder Abkürzungen wie "DomUtil" enthält), dann rufen Sie Ihr Paket "Whatever.WhateverUtil" (oder Utils, wenn Ihr Paket mehr als ein Dienstprogramm enthält) auf ). Andernfalls, wenn es einen vollständigen Namen anstelle einer Abkürzung hat, nennen Sie es "Whatever.WhateverUtilities".
Es liegt wirklich an Ihnen, aber solange die Programmierer wissen, wovon Sie sprechen, können Sie loslegen. Wenn Sie dies professionell als Job für jemanden tun, fragen Sie ihn nach seinen Codierungsstandards, bevor Sie meinen Rat befolgen. Halten Sie sich immer an die Shop-Standards, egal was Ihnen dabei hilft, Ihren Job zu behalten. :-)
quelle