Как назвать фабрику как методы?

Я предполагаю, что большинство подобных фабрике методов запускается с create. Но почему они названы, "создают"? Почему бы не "сделать", "произведите", "создайте", "генерируйте" или что-то еще? Действительно ли это - только вопрос вкуса? Конвенция? Или есть ли особое значение в, "создают"?

createURI(...) 
makeURI(...)
produceURI(...)
buildURI(...)
generateURI(...)

Какой Вы выбрали бы в целом и почему?

130
задан deamon 2 January 2018 в 15:43
поделиться

5 ответов

Некоторые случайные мысли:

  • «Создать» подходит для этой функции лучше, чем большинство других слов. Следующее лучшее слово, которое я могу придумать, - это «конструировать». В прошлом «Alloc» (выделить) могло использоваться в аналогичных ситуациях, отражая больший упор на блоки данных, чем на объекты в таких языках, как C.

  • «Создать» - это короткое простое слово, имеющее ясный интуитивный смысл. значение. В большинстве случаев люди, вероятно, просто выбирают его как первое, наиболее очевидное слово, которое приходит на ум, когда они хотят что-то создать. Это обычное соглашение об именах, а «создание объекта» - это общий способ описания процесса ... создания объектов.

  • 'Construct' близок к этому, но обычно он используется для описания определенного этапа в процессе создания объекта (выделить / создать, построить, инициализировать ...)

  • «Сборка» и «Создание» - общие термины для процессов, относящихся к компиляции кода, поэтому они имеют разные коннотации для программистов, подразумевая процесс, который включает много шагов и, возможно, большую активность диска. Однако идея фабрики, «строящей» что-либо, является разумной идеей - особенно в случаях, когда строится сложная структура данных или когда каким-то образом объединяются многие отдельные части информации.

  • «Генерировать» для меня означает вычисление, которое используется для получения значения из ввода, такого как генерация хэш-кода или случайного числа.

  • «Произвести», «Сгенерировать», «Построить» длиннее для ввода / чтения, чем «Создать». Исторически сложилось так, что программисты предпочитали короткие имена, чтобы сократить ввод / чтение.

102
ответ дан 24 November 2019 в 00:24
поделиться

Я бы отметил, что видел все глаголы, но производят, которые используются в той или иной библиотеке, поэтому я бы не стал называть создание универсальным соглашением.

Теперь create действительно звучит лучше для меня, пробуждает точный смысл действия.

Так что да, это вопрос (литературного) вкуса.

0
ответ дан 24 November 2019 в 00:24
поделиться

«Create» и «make» короткие, достаточно запоминающиеся и не привязанные к другим шаблонам именования, которые я могу придумать.Я также довольно часто видел и то и другое и подозреваю, что они могут быть «стандартами де-факто». Я бы выбрал один и постоянно использовал его, по крайней мере, в рамках проекта. (Глядя на мой собственный текущий проект, мне кажется, что я использую «make». Надеюсь, что я последователен ...)

Избегайте «build», потому что оно лучше соответствует шаблону Builder, и избегайте «production», потому что оно вызывает у «Producer» /Потребитель.

Продолжая метафору названия паттерна «Фабрика», меня соблазнит «производство», но это слишком длинное слово.

9
ответ дан 24 November 2019 в 00:24
поделиться

Частично условность, частично семантика.

Заводские методы (сигнализируемые традиционным create ) должны вызывать соответствующие конструкторы. Если бы я увидел buildURI , я бы предположил, что это связано с некоторыми вычислениями или сборкой из частей (и я бы не подумал, что здесь задействована фабрика). Первое, что я подумал, когда увидел generateURI , - это создание чего-то случайного, например, новой персонализированной ссылки для скачивания. Они не все одинаковы, разные слова имеют разное значение; но большинство из них не стилизованы.

2
ответ дан 24 November 2019 в 00:24
поделиться

Я бы назвал это UriFactory.Create()

Где,

UriFactory - это имя типа класса, который предоставляет метод(ы), создающие Uri экземпляры.

и Create() метод перегружается для стольких вариантов, сколько у вас есть в спецификации.

public static class UriFactory
{
    //Default Creator
    public static UriType Create() 
    {
    }

    //An overload for Create()
    public static UriType Create(someArgs) 
    {
    }
}
1
ответ дан 24 November 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: