Які відмінності між класами Helper та Utility?


115

Як визначити, як викликати клас XHelper або XUtils?

На мою думку :

Клас помічників - це клас, який може бути примірником і виконувати якусь ділову роботу

Клас Utils - це статичний клас, який виконує невеликі і повторювані операції на певному екземплярі (приклад класів utils ArrayUtils або IOUtils від Apache)


5
"Ділова робота" - це ключова відмінність тут. Я вважаю корисним умову використовувати Utilsдля статичного класу, який можна використовувати в будь-якій точці організації або в іншій організації. HelperКлас має загальний код , який може бути повторно використовуватися в рамках проекту , та має залежності в рамках проекту. Звичайно, загальноприйнятого правила немає, але я вважаю це корисним.
Стівен Хоскінг

1
@StephenHosking Ваше пояснення мене найбільш переконує і, можливо, для всіх. Якщо це можливо, ви б опублікували своє пояснення як фактичну відповідь на це повідомлення, а не просто залишений коментар.
Бігаїр

@Bigair. Дякую, але моє - це лише пропозиція, а не відповідь. Я радий, що люди вважають це корисним.
Стівен Хоскінг

Відповіді:


101

Існує багато стилів іменування. Я б запропонував Utils тільки тому, що його більш поширене.

Клас утиліти, як відомо, має лише статичні методи та не має статусу. Ви б не створили примірник такого класу.

Помічник може бути класом утиліти, або він може мати статус або вимагати створення екземпляра. Я б цього уникав, якщо це можливо.

Якщо ви можете зробити ім'я більш конкретним. наприклад, якщо у нього є методи сортування, зробіть це XSorter

Для масивів можна знайти схожі класи

Array
Arrays
ArrayUtil
ArrayUtils
ArrayHelper

До речі, коротка рука для класу корисності - це перерахунок без жодних екземплярів

enum XUtils {;
    static methods here
}

Якщо вам потрібно реалізувати інтерфейс, я б використав Singleton без стану.

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

Я це в цій публікації stackoverflow.com/a/2135797/787698 , що Xutils - це статичний клас без залежностей. Що ти думаєш про це?
jakcam

@jakcam Цікавий момент. Помічник може бути вибагливим і вимагати примірника. Я б за можливості скористався класом утиліти без стану та інстанцій.
Пітер Лодрі

Що ви розумієте під Xutils - це статичний клас без залежностей ?
jakcam

Я не можу знайти "xutils" або "ніяких залежностей" у цій посаді.
Пітер Лодрі

1
@John У такому випадку корисний метод не бажаний, оскільки складніше знущатися з метою тестування.
Пітер Лорі

16

В загальному? Це абсолютно довільно. Для цього немає правил.


8

Утиліта - це клас загального користування "листовий вузол". Тобто, він не має ніяких залежностей у вашому проекті, і його можна переносити з проекту на проект, не руйнуючись і не стаючи марним. Приклади: Vector3, RandomNumberGenerator, StringMatcher, і т.д. ...

"Помічником", здається, є будь-який клас, дизайн якого допомагає іншому класу. Вони можуть або не залежати від вашого проекту. Якщо ви створюєте GameNetworkClientклас, можна сказати, що GameNetworkConnectionклас є "помічником", оскільки він "допомагає" GameNetworkClient.

Те, як розробники посилаються на інструменти, відображає загальне використання цих слів. Якщо ви можете згадати слухові інструменти, описані як "корисні" проти "корисні", корисний інструмент має певний контекст (терка сиру допомагає натерти сир, зачистка кукурудзи допомагає зачистити кукурудзу, швидкий навантажувач допомагає перезарядити вогнепальну зброю). Очікується, що "утиліта" працюватиме в різних контекстах (WD-40, клейка стрічка, армійські ножі, клей, ліхтарик тощо).


5

Як сказав Єспер, це абсолютно довільно . Ви можете придумати, що працює для вашої організації, і зробити цю конвенцію.

Для мене це щось подібне:

утилі - Статичний клас, який можна вільно переміщувати та імпортувати куди завгодно.

Виконання загальних завдань, які можуть бути корисні в різних модулях. Як сказав Пітер Лорі, корисніші конкретні назви .

helper - Клас, що допомагає іншому класу або модулю.

Завдання, які використовуються лише в модулі, в якому він розміщений, і не мають сенсу імпортувати в інше місце. Таким чином, ім'я може бути більш конкретним - ModuleName Helper (наприклад AdministrationHelper , LoginHelper )


2

На це немає остаточної відповіді. Складіть одну схему іменування та дотримуйтесь її. Іменування ваших пакетів та класів є важливою частиною архітектури програмного забезпечення, і ніхто не може забрати це рішення від вас.

Мені особисто більше подобається XHelper, але я частіше бачу XUtils в закордонному коді.

Мені також подобається схема множини імен, яку ви знайдете як у JDK, так і в Guava :

якщо клас займається Collectionоб'єктами, він називаєтьсяCollections

Масив> Список масивів (jdk)
> Списки (гуава)
Карта> Карти (гуава)

тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.