Как назвать factory подобные методы?

Я предполагаю, что большинство подобных методов factory начинаются с create. Но почему они называются " create"? Почему бы не " make", " produce", " build", " generate" или что-то другое? Это только вопрос вкуса? Соглашение? Или есть особый смысл в "create"?

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

Какой из них вы бы выбрали вообще и почему?

Ответ 1

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

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

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

  • "Конструкция" близка, но обычно используется для описания определенного этапа в процессе создания объекта (выделить/new, construct, initialize...)

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

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

  • 'Produce', 'Generate', 'Construct' длиннее типа /read, чем 'Create'. Исторически программисты предпочитали короткие имена для сокращения ввода/чтения.

Ответ 2

Джошуа Блох в "Эффективной Java" предлагает следующие соглашения об именах

valueOf. Возвращает экземпляр, который имеет, разумеется, одно и то же значение как его параметры. Такие статические заводы эффективно методы преобразования типов.

- краткая альтернатива valueOf, популяризированная EnumSet (пункт 32).

getInstance - возвращает экземпляр, который описывается параметрами но нельзя сказать, что они имеют одинаковую ценность. В случае одноэлементного, getInstance не принимает параметров и возвращает единственный экземпляр.

newInstance. Как и getInstance, за исключением того, что newInstance гарантирует, что каждый возвращаемый экземпляр отличается от всех остальных.

getType. Как и getInstance, но используется, когда метод factory находится в другой класс. Тип указывает тип объекта, возвращаемого factory.

newType. Как newInstance, но используется, когда метод factory находится в другой класс. Тип указывает тип объекта, возвращаемого factory.

Ответ 3

Хотел добавить пару очков, которых я не вижу в других ответах.

  • Хотя традиционно "Factory" означает "создает объекты", мне нравится думать об этом более широко, поскольку "возвращает мне объект, который ведет себя так, как я ожидаю". Я не должен всегда знать, является ли это совершенно новым объектом, на самом деле мне может быть безразлично. Поэтому в подходящих случаях вы можете избежать имени "Создать...", даже если это будет реализовано прямо сейчас.

  • Гуава - это хороший репозиторий идей именования factory. Он популяризирует красивый стиль DSL. примеры:

    Lists.newArrayListWithCapacity(100);
    ImmutableList.of("Hello", "World");
    

Ответ 4

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

Избегайте "сборки", потому что он лучше подходит для шаблона Builder и избегает "производить", потому что он вызывает производителя/потребителя.

Чтобы действительно продолжить метафорию имени "Factory" для шаблона, меня соблазнит "производство", но это слишком долгое слово.

Ответ 5

Я думаю, что это связано с "созданием объекта". Однако на английском языке слово "создать" ассоциируется с понятием "заставить возникнуть, как нечто уникальное, которое естественно не эволюционировало бы или которое не было сделано обычными процессами", и "развиваться из одной собственной мысли или воображение, как произведение искусства или изобретение". Поэтому кажется, что "создать" не является правильным словом для использования. "Сделать", с другой стороны, означает "привести к возникновению путем формирования или изменения материала, объединения частей и т.д.", Например, вы не создаете платье, вы делаете платье (объект). Таким образом, по моему мнению, "сделать" по смыслу "производить, вызывать существование или происходить, вызывать" - гораздо лучшее слово для методов factory.

Ответ 6

Частичное соглашение, частично семантика.

Методы

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

Ответ 7

Я бы назвал его UriFactory.Create()

Где

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

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

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

    //An overload for Create()
    public static UriType Create(someArgs) 
    {
    }
}

Ответ 8

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

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

Итак, да, это вопрос (литературный).

Ответ 9

Лично мне нравится instantiate и instantiateWith, но это только из-за моего единства и опыта Objective C. Соглашения об именах внутри движка Unity, похоже, вращаются вокруг слова instantiate, чтобы создать экземпляр с помощью метода factory, а Objective C похоже на with, чтобы указать, что такое параметр /s. Это действительно хорошо работает, если метод находится в классе, который будет создан (хотя и в языках, допускающих перегрузку конструктора, это не столько "вещь" ).

Просто старый объект Objective C initWith также является хорошим!

Ответ 10

Factory метод не диктует имя метода. В вашем factory вы можете использовать столько методов, если все они возвращают объект из того же семейства.

Для получения более подробной информации посетите URL-адрес http://xeon2k.wordpress.com