Jakie są różnice między klasami Helper i Utility?


116

Jak określić, jak wywołać klasę XHelper lub XUtils?

Moim zdaniem:

Klasa pomocnicza to klasa, której można utworzyć instancję i wykonać pewne prace biznesowe

Klasa Utils to klasa statyczna, która wykonuje małe i powtarzalne operacje na pewnego rodzaju instancji (przykład klas narzędzi ArrayUtils lub IOUtils z Apache)


5
„Praca biznesowa” to tutaj kluczowe wyróżnienie. Uważam, że jest to użyteczna konwencja w Utilsprzypadku klas statycznych, które mogą być używane w dowolnym miejscu w organizacji lub w innej organizacji. HelperKlasa ma wspólny kod, który może być ponownie użyty w projekcie i ma współzależności w ramach projektu. Oczywiście nie ma ogólnie przyjętej reguły, ale uważam to za przydatne.
Stephen Hosking

1
@StephenHosking Twoje wyjaśnienie jest najbardziej przekonujące dla mnie i może dla wszystkich. Jeśli to możliwe, możesz zamieścić swoje wyjaśnienie jako rzeczywistą odpowiedź na ten post, a nie tylko zostawić komentarz.
Bigair

@Bigair. Dziękuję, ale moja to tylko sugestia, a nie odpowiedź. Cieszę się, że ludzie uznali to za pomocne.
Stephen Hosking

Odpowiedzi:


102

Istnieje wiele stylów nazewnictwa. Sugerowałbym Utils tylko dlatego, że jest bardziej powszechny.

Przyjmuje się, że klasa Utility ma tylko metody statyczne i jest bezstanowa. Nie utworzyłbyś instancji takiej klasy.

Pomocnik może być klasą narzędziową, może być stanowy lub wymagać utworzenia instancji. Unikałbym tego, jeśli to możliwe.

Jeśli możesz sprecyzować nazwę. np. jeśli ma metody sortowania, uczyń go XSorter

W przypadku tablic można znaleźć klasy pomocnicze, takie jak

Array
Arrays
ArrayUtil
ArrayUtils
ArrayHelper

Przy okazji, krótka ręka dla klasy użytkowej to wyliczenie bez instancji

enum XUtils {;
    static methods here
}

Jeśli potrzebujesz zaimplementować interfejs, użyłbym bezstanowego Singletona.

enum XHelper implements RequiredInterface {
   INSTANCE;
   // no instance fields.
}

W tym poście stackoverflow.com/a/2135797/787698 stwierdzam , że Xutils jest klasą statyczną bez zależności. Co o tym myślisz?
jakcam

@jakcam Ciekawa uwaga. Pomocnik może być stanowy i wymagać instancji. Jeśli to możliwe, użyłbym bezstanowej i bezinstancyjnej klasy narzędziowej.
Peter Lawrey,

Co rozumiesz przez Xutils to klasa statyczna bez zależności ?
jakcam

Nie mogę znaleźć „xutils” lub „brak zależności” w tym poście.
Peter Lawrey,

1
@John W takim przypadku metoda narzędziowa nie jest pożądana, ponieważ trudniej jest ją wyszydzić do celów testowych.
Peter Lawrey

16

Ogólnie? To jest całkowicie arbitralne. Nie ma na to żadnych reguł.


8

Narzędzie to klasa „węzłów-liści” ogólnego użytku. Oznacza to, że nie ma żadnych zależności w twoim projekcie i można go przenosić z projektu do projektu bez zrywania lub bezużyteczności. Przykłady: Vector3, RandomNumberGenerator, StringMatcher, itd ...

„Pomocnikiem” wydaje się być każda klasa, której celem jest pomoc innej klasie. Mogą, ale nie muszą zależeć od twojego projektu. Jeśli tworzysz GameNetworkClientklasę, możesz powiedzieć, że GameNetworkConnectionjest ona „pomocnikiem”, ponieważ „pomaga” GameNetworkClient.

Sposób, w jaki programiści odnoszą się do narzędzi, odzwierciedla powszechne użycie tych słów. Jeśli pamiętasz aparaty słuchowe opisane jako „pomocne”, a nie „przydatne”, pomocne narzędzie zwykle ma jakiś kontekst (tarka do sera pomaga trzeć ser, urządzenie do usuwania kukurydzy pomaga rozbierać kukurydzę, ładowarka pomaga przeładować broń). Oczekuje się, że „narzędzie” będzie działać w różnych kontekstach (WD-40, taśma klejąca, noże wojskowe, klej, latarka itp.).


5

Jak powiedział Jesper, jest to całkowicie arbitralne . Możesz pomyśleć o tym, co działa dla Twojej organizacji i uczynić to konwencją.

Dla mnie jest to coś takiego:

utils - Klasa statyczna, którą można dowolnie przenosić i importować w dowolnym miejscu.

Wykonywanie ogólnych zadań, które mogą być przydatne w różnych modułach. Jak powiedział Peter Lawrey, bardziej szczegółowe nazwy są przydatne.

helper - klasa pomagająca innej klasie lub modułowi.

Zadania, które są używane tylko w module, który został umieszczony i nie mają sensu importować ich gdzie indziej. Dlatego nazwa mogłaby być bardziej szczegółowa - ModuleName Helper (np. AdministrationHelper , LoginHelper )


2

Nie ma na to ostatecznej odpowiedzi. Wymyśl jeden schemat nazewnictwa i trzymaj się go. Nazywanie pakietów i klas jest ważną częścią architektury oprogramowania i nikt nie może odebrać Ci tej decyzji.

Osobiście bardziej podoba mi się XHelper, ale częściej widzę XUtils w obcym kodzie.

Podoba mi się również schemat nazewnictwa „liczby mnogiej”, który można znaleźć zarówno w JDK, jak i w guawie :

jeśli klasa zajmuje się Collectionobiektami, jest wywoływanaCollections

Tablica> Tablice (jdk)
Lista> Listy (guawa)
Mapa> Mapy (guawa)

itp.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.