Myślę, że większość metod fabrycznych zaczyna się od create
. Ale dlaczego nazywa się je „ tworzyć ”? Dlaczego nie „ tworzyć ”, „ produkować ”, „ budować ”, „ generować ” lub czegoś innego? Czy to tylko kwestia gustu? Konwencja? A może ma specjalne znaczenie w „tworzeniu”?
createURI(...)
makeURI(...)
produceURI(...)
buildURI(...)
generateURI(...)
Który z nich wybrałbyś ogólnie i dlaczego?
createXyz()
.create
prefiksu jako konwencji ze względu na spójność API, a także dlatego, że samo wpisanie literyc
spowodowałoby, że wszystkie z nich pojawiłyby się w autouzupełnianiu IDE, co ułatwiłoby to dla kogoś, kto próbuje dowiedzieć się, co jest dostępne. Mógłbym miałemMatrix4f.identity()
,Matrix4f.transpose()
itp ale byliby szybciej znaleźć jakMatrix4f.createIdentity()
iMatrix4f.createTranspose(...)
itpOdpowiedzi:
Kilka przypadkowych myśli:
„Utwórz” lepiej pasuje do tej funkcji niż większość innych słów. Kolejnym najlepszym słowem, które przychodzi mi do głowy, jest „Konstruuj”. W przeszłości „Alloc” (przydziel) mogło być używane w podobnych sytuacjach, odzwierciedlając większy nacisk na bloki danych niż obiekty w językach takich jak C.
„Utwórz” to krótkie, proste słowo o jasnym, intuicyjnym znaczeniu. W większości przypadków ludzie prawdopodobnie wybierają to jako pierwsze, najbardziej oczywiste słowo, które przychodzi im na myśl, gdy chcą coś stworzyć. To powszechna konwencja nazewnictwa, a „tworzenie obiektów” to powszechny sposób opisywania procesu ... tworzenia obiektów.
`` Konstrukcja '' jest bliska, ale zwykle służy do opisania konkretnego etapu w procesie tworzenia obiektu (przydziel / nowy, skonstruuj, zainicjalizuj ...)
„Build” i „Make” to terminy wspólne dla procesów związanych z kompilacją kodu, dlatego mają różne konotacje dla programistów, co oznacza proces składający się z wielu kroków i prawdopodobnie dużej aktywności dyskowej. Jednak idea „budowania” czegoś przez Fabrykę jest rozsądnym pomysłem - szczególnie w przypadkach, gdy budowana jest złożona struktura danych lub wiele oddzielnych informacji jest w jakiś sposób łączonych.
„Generuj” oznacza dla mnie obliczenia, które są używane do tworzenia wartości z danych wejściowych, na przykład generowanie kodu skrótu lub liczby losowej.
„Produkuj”, „Generuj”, „Konstruuj” są dłuższe do wpisania / odczytu niż „Utwórz”. W przeszłości programiści preferowali krótkie nazwy, aby ograniczyć pisanie / czytanie.
źródło
Joshua Bloch w „Effective Java” sugeruje następujące konwencje nazewnictwa
źródło
from
? Np. Przyjmowanie hipotetycznegoId.of("abc")
kontraId.from("xyz")
… lubfrom
sugerowałoby więcej logiki (tj. Analizowanie danych wejściowych, wyszukiwanie / korelacja z / z innymi danymi…)? Naprawdę trudno jest wyszukać "of vs from": DChciałem dodać kilka punktów, których nie widzę w innych odpowiedziach.
Chociaż tradycyjnie „Fabryka” oznacza „tworzy przedmioty”, wolę myśleć o tym szerzej jako „zwraca mi obiekt, który zachowuje się tak, jak się spodziewam”. Nie powinienem zawsze wiedzieć, czy to zupełnie nowy przedmiot , w rzeczywistości może mnie to nie obchodzić. Dlatego w odpowiednich przypadkach możesz uniknąć nazwy „Utwórz ...”, nawet jeśli właśnie tak ją implementujesz.
Guawa to dobre repozytorium pomysłów na nazwy fabryk. Popularyzuje ładny styl DSL. przykłady:
źródło
„Tworzenie” i „tworzenie” są krótkie, dość sugestywne i nie są powiązane z innymi wzorcami w nazewnictwie, które przychodzą mi do głowy. Widziałem też oba dość często i podejrzewam, że mogą to być „de facto standardy”. Wybrałbym jeden i używałbym go konsekwentnie przynajmniej w ramach projektu. (Patrząc na mój obecny projekt, wydaje mi się, że używam słowa „make”. Mam nadzieję, że jestem konsekwentny ...)
Unikaj „budowania”, ponieważ lepiej pasuje do wzorca Konstruktora i unikaj „produkcji”, ponieważ przywołuje to producenta / konsumenta.
Aby naprawdę kontynuować metaforę nazwy „Fabryka” dla wzoru, kusiłabym się „manufakturą”, ale to za długie słowo.
źródło
Myślę, że wynika to z „ tworzenia przedmiotu”. Jednak w języku angielskim słowo „stworzyć” jest powiązane z pojęciem „spowodować powstanie, jako coś wyjątkowego, co nie wyewoluowałoby w naturalny sposób lub nie zostało wytworzone w wyniku zwykłych procesów” oraz „ewoluować z własnej myśli lub wyobraźnia, jako dzieło sztuki lub wynalazek ”. Wygląda więc na to, że „tworzyć” nie jest właściwym słowem. Z drugiej strony „tworzyć” oznacza „powstawać poprzez kształtowanie lub zmianę materiału, łączenie części itp.” Na przykład, nie stworzyć sukienkę, to zrobić sukienkę (Object). Tak więc, moim zdaniem, „robić” w znaczeniu „produkować; przyczyna zaistnienia lub zdarzenia; doprowadzić ”to o wiele lepsze określenie metod fabrycznych.
źródło
Lubię nowe. Dla mnie
czyta lepiej niż
Przetłumaczone na angielski mamy foo to nowe foo lub foo to utworzone foo. Chociaż nie jestem ekspertem od gramatyki, jestem prawie pewien, że ta ostatnia jest niepoprawna gramatycznie.
źródło
createFoo
jest funkcją.foo
nie jestcreateFoo
, jak mówisz.foo
jest wynikiemcreateFoo()
.Po części konwencja, po części semantyka.
Metody fabryczne (sygnalizowane tradycyjnymi
create
) powinny wywoływać odpowiednie konstruktory. Gdybym zobaczyłbuildURI
, założyłbym, że wymagało to jakichś obliczeń lub montażu z części (i nie sądziłbym, że była w to zaangażowana fabryka). Pierwszą rzeczą, o której pomyślałem, kiedy zobaczyłem,generateURI
było zrobienie czegoś przypadkowego, na przykład nowego spersonalizowanego linku do pobrania. Nie wszystkie są takie same, różne słowa wywołują różne znaczenia; ale większość z nich nie jest konwencjonalna.źródło
Nazwałbym to
UriFactory.Create()
Gdzie,
UriFactory
to nazwa typu klasy, który udostępnia metody do tworzeniaUri
instancji.a
Create()
metoda jest przeciążona dla tylu wariantów, które masz w specyfikacjach.źródło
Zwracam uwagę, że widziałem wszystkie czasowniki, ale produkuję je w jakiejś bibliotece lub innej, więc nie nazwałbym tworzenia jako konwencją uniwersalną.
Teraz kreacja brzmi dla mnie lepiej, przywołuje precyzyjny sens akcji.
Więc tak, to kwestia gustu (literackiego).
źródło
Osobiście lubię
instantiate
iinstantiateWith
, ale to tylko z powodu moich doświadczeń z Jednością i Obiektywem C. Konwencje nazewnictwa w silniku Unity wydają się obracać wokół słowa,instantiate
aby utworzyć instancję za pomocą metody fabrycznej, a Cel C wydaje się lubićwith
wskazywać, jakie są parametry. Działa to naprawdę dobrze tylko wtedy, gdy metoda znajduje się w klasie, która ma zostać utworzona (aw językach, które pozwalają na przeciążanie konstruktorów, nie jest to taka „rzecz”).Zwykłe, stare obiekty Objective C
initWith
to także niezła broń!źródło
Metoda fabryczna nie narzuca nazwy metody. Możesz mieć dowolną liczbę metod w swojej fabryce, pod warunkiem, że wszystkie zwracają obiekt z tej samej rodziny.
Aby uzyskać więcej informacji, odwiedź adres URL http://xeon2k.wordpress.com
źródło