Я думаю, что большинство фабричных методов начинаются с create
. Но почему они называются « создавать »? Почему бы не « делать », « производить », « строить », « генерировать » или что-то еще? Это только вопрос вкуса? Соглашение? Или в слове «создавать» есть особый смысл?
createURI(...)
makeURI(...)
produceURI(...)
buildURI(...)
generateURI(...)
Что бы вы выбрали в целом и почему?
createXyz()
.create
префикс по соглашению для согласованности API, а также потому, что простой ввод буквыc
приведет к тому, что все они будут отображаться в автозаполнении IDE, что упростит для тех, кто пытается узнать, что доступно. Я мог бы имелMatrix4f.identity()
,Matrix4f.transpose()
и т.д. , но они будут быстрее найти , какMatrix4f.createIdentity()
иMatrix4f.createTranspose(...)
т.д.Ответы:
Некоторые случайные мысли:
«Создать» подходит для этой функции лучше, чем большинство других слов. Следующее лучшее слово, которое я могу придумать, - это «конструировать». В прошлом «Alloc» (выделить) могло использоваться в аналогичных ситуациях, отражая больший упор на блоки данных, чем на объекты в таких языках, как C.
«Создавать» - это короткое простое слово, имеющее ясное интуитивное значение. В большинстве случаев люди, вероятно, просто выбирают его как первое, наиболее очевидное слово, которое приходит на ум, когда они хотят что-то создать. Это обычное соглашение об именах, а «создание объекта» - это общий способ описания процесса ... создания объектов.
'Construct' - это близко, но обычно используется для описания определенного этапа в процессе создания объекта (выделить / создать, построить, инициализировать ...)
«Сборка» и «Создание» - общие термины для процессов, относящихся к компиляции кода, поэтому имеют разные значения для программистов, подразумевая процесс, который включает много шагов и, возможно, большую активность диска. Однако идея фабрики, «строящей» что-то, является разумной идеей, особенно в случаях, когда построена сложная структура данных или когда каким-то образом объединены многие отдельные части информации.
«Генерировать» для меня подразумевает вычисление, которое используется для получения значения из ввода, такого как генерация хэш-кода или случайного числа.
«Produce», «Generate», «Construct» длиннее для ввода / чтения, чем «Create». Исторически сложилось так, что программисты предпочитали короткие имена, чтобы сократить ввод / чтение.
источник
Джошуа Блох в «Эффективной Java» предлагает следующие соглашения об именах
источник
from
? Например, если взять гипотетическоеId.of("abc")
противId.from("xyz")
… илиfrom
предложить больше логики (например, синтаксический анализ ввода, поиск / корреляция с / с другими данными,…)? Искать "of vs from" действительно сложно: DХотел добавить пару моментов, которых не вижу в других ответах.
Хотя традиционно «Factory» означает «создает объекты», мне нравится думать об этом в более широком смысле, как «возвращает мне объект, который ведет себя так, как я ожидал». Мне не всегда нужно знать, новый ли это объект , на самом деле меня это может не волновать. Так что в подходящих случаях вы можете избежать имени «Создать ...», даже если именно так вы его реализуете прямо сейчас.
Guava - хорошее хранилище идей фабричного именования. Это популяризация красивого стиля DSL. Примеры:
источник
«Create» и «make» короткие, достаточно вызывающие воспоминания и не привязанные к другим шаблонам именования, которые я могу придумать. Я также довольно часто видел и то, и другое и подозреваю, что они могут быть «стандартами де-факто». Я бы выбрал один и постоянно использовал его, по крайней мере, в рамках проекта. (Глядя на мой собственный текущий проект, я, кажется, использую "make". Надеюсь, я последователен ...)
Избегайте «строить», потому что это лучше соответствует паттерну «Строитель», и избегайте «производить», потому что оно вызывает у производителя / потребителя.
Продолжая метафору названия паттерна «Factory», меня соблазнит «производство», но это слишком длинное слово.
источник
Я думаю, что это происходит от « создать объект». Однако в английском языке слово «создавать» ассоциируется с понятием «вызывать возникновение как нечто уникальное, которое не может развиваться естественным образом или не создается обычными процессами», и «развиваться из собственной мысли или воображение, как произведение искусства или изобретение ». Таким образом, кажется, что «создавать» - не подходящее слово. «Создавать», с другой стороны, означает «создавать, формируя или изменяя материал, комбинируя части и т. Д.» Например, вы не создать платье, вы сделать платье (объект). Поэтому, на мой взгляд, «производить» означает «производить; причина существования или возникновения; вызвать »- это гораздо более подходящее слово для фабричных методов.
источник
Люблю новое. Мне
читает лучше, чем
В переводе на английский мы имеем foo - это новый foo или foo - это create foo. Хотя я не специалист по грамматике, я почти уверен, что последнее грамматически неверно.
источник
createFoo
это функция.foo
нетcreateFoo
, как вы говорите.foo
является результатомcreateFoo()
.Отчасти условность, отчасти семантика.
Фабричные методы (сигнализируемые традиционными
create
) должны вызывать соответствующие конструкторы. Если бы я увиделbuildURI
, я бы предположил, что это связано с некоторыми вычислениями или сборкой из частей (и я бы не подумал, что это была фабрика). Первое, что я подумал, когда увидел,generateURI
- это создание чего-то случайного, например, новой персональной ссылки для скачивания. Они не все одинаковы, разные слова имеют разное значение; но большинство из них не стилизованы.источник
Я бы назвал это
UriFactory.Create()
Куда,
UriFactory
- это имя типа класса, который предоставляет метод (ы) для созданияUri
экземпляров.и
Create()
метод перегружен столько, сколько вариантов есть в ваших спецификациях.источник
Я хотел бы отметить, что я видел все глаголы, кроме производящих, которые используются в той или иной библиотеке, поэтому я бы не стал называть create универсальным соглашением.
Теперь create действительно звучит лучше для меня, пробуждает точное значение действия.
Так что да, это вопрос (литературного) вкуса.
источник
Лично мне нравится
instantiate
иinstantiateWith
, но это только из-за моего опыта работы с Unity и Objective C. Соглашения об именах внутри движка Unity, похоже, вращаются вокруг словаinstantiate
для создания экземпляра с помощью фабричного метода, а Objective C, похоже, любитwith
указывать, что такое параметр / параметры. Это действительно хорошо работает только в том случае, если метод находится в классе, экземпляр которого будет создан (и в языках, допускающих перегрузку конструктора, это не такая уж большая «вещь»).Просто старый
initWith
добрый Objective C тоже хорош!источник
Заводской метод не зависит от имени метода. У вас может быть столько методов, сколько вы хотите, при условии, что все они возвращают объект из одного семейства.
Для получения дополнительной информации посетите URL-адрес http://xeon2k.wordpress.com
источник