Соглашение об именах для служебных классов в Java - PullRequest
104 голосов
/ 20 апреля 2010

При написании служебных классов на Java, какие правила следует соблюдать?

Должны ли пакеты быть "util" или "utils"? Это ClassUtil или ClassUtils? Когда класс «Помощник» или «Утилита»? Утилита или Утилиты? Или вы используете их смесь?

Стандартная библиотека Java использует как Utils, так и Utilities:

  • javax.swing.Utilities
  • javax.print.attribute.AttributeSetUtilities
  • javax.swing.plaf.basic.BasicGraphicsUtils

Apache использует различные Util и Utils, хотя в основном это 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 использует много классов Helper и Utils:

  • org.springframework.web.util.UrlPathHelper
  • org.springframework.core.ReflectiveVisitorHelper
  • org.springframework.core.NestedExceptionUtils
  • org.springframework.util.NumberUtils

Итак, как вы называете свои служебные классы?

Ответы [ 5 ]

71 голосов
/ 20 апреля 2010

Как и во многих подобных соглашениях, важно не столько соглашение, которое вы используете, сколько то, что вы используете его последовательно. Например, если у вас есть три служебных класса, и вы называете их CustomerUtil, ProductUtils и StoreUtility, другие люди, пытающиеся использовать ваши классы, будут постоянно путаться и вводить CustomerUtils по ошибке, придется искать их, проклинать вас несколько раз, и т. д. (однажды я услышал лекцию о последовательности, на которой докладчик выложил слайд, на котором показаны наброски его речи с тремя основными пунктами, обозначенными «1», «2-й» и «С».)

Никогда не делайте двух имен, которые отличаются лишь некоторой тонкостью написания, например, имеют CustomerUtil и CustomerUtility. Если для создания двух классов была веская причина, то в них должно быть что-то другое, и название должно, по крайней мере, дать нам понять, в чем заключается это различие. Если одна содержит служебные функции, связанные с именем и адресом, а другая содержит служебные функции, связанные с заказами, то назовите их CustomerNameAndAddressUtil и CustomerOrderUtil или некоторые другие. Я регулярно схожу с ума, когда вижу бессмысленные тонкие различия в именах. Как и вчера, я работал над программой, в которой было три поля для затрат на фрахт, названных «перевозка», «стоимость перевозки» и «доставка». Мне пришлось изучить код, чтобы выяснить, в чем разница между ними.

27 голосов
/ 20 апреля 2010

В мире Java нет стандартных правил / соглашений для этого. Однако я предпочитаю добавлять «s» в конце имени класса, как упомянул @colinD.

Это кажется довольно стандартным для того, что Мастер java API Designer Джош Блох делает (коллекция java, а также коллекция Google)

Пока работают Helper и Util, я буду называть что-то Helper, когда у него есть API, которые помогают достичь определенной функциональности пакета (рассматривая пакет как реализацию модуля); значит, Util может быть вызван в любом контексте.

Например, в приложении, связанном с банковскими счетами, все статические API-интерфейсы для конкретных номеров будут иметь значение org.mycompany.util.Numbers

Все API, помогающие бизнес-правилам, относящимся к «Учетной записи», перейдут на

org.mycompany.account.AccountHelper

В конце концов, это вопрос обеспечения лучшей документации и более чистого кода.

20 голосов
/ 20 апреля 2010

Мне нравится соглашение просто добавлять "s" к имени типа, когда тип является интерфейсом или классом, который вы не контролируете. Примеры этого в JDK включают Collections и Executors. Это также соглашение, используемое в Google Collections.

Когда вы имеете дело с классом , которым вы управляете, я бы сказал, что служебные методы обычно принадлежат самому классу.

8 голосов
/ 20 апреля 2010

Я думаю, что 'utils' должно быть именем пакета. Имена классов должны указывать назначение логики внутри него. Добавление суффикса -util (s) является избыточным.

3 голосов
/ 20 апреля 2010

Я почти уверен, что слова "помощники" и "утилиты" используются взаимозаменяемо. В любом случае, судя по приведенным вами примерам, я бы сказал, что если ваше имя класса является аббревиатурой (или содержит сокращения в нем, например, "DomUtil"), тогда вызовите ваш пакет "what.WhwhatUtil" (или Utils, если в вашем пакете более одной утилиты ). Иначе, если у него есть полное имя вместо аббревиатуры, тогда назовите его «what.WhwhatUtilities».

Это действительно зависит от вас, но пока кодеры знают, о чем вы говорите, вы готовы к работе. Если вы делаете это профессионально как работу для кого-то, спросите их, каковы их стандарты кодирования, прежде чем принимать мой совет. Всегда следуйте стандартам магазина, независимо от того, что поможет вам сохранить вашу работу. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...