Od dłuższego czasu badam Clojure, chociaż nie korzystałem z niego w żadnych nietrywialnych projektach. Zasadniczo właśnie poczułem się komfortowo ze składnią i niektórymi idiomami. Pochodzę ze środowiska OOP, a Clojure jest pierwszym językiem funkcjonalnym, w którym bardzo się spoglądałem, oczywiście nie czuję się tak dobrze z funkcjonalnym sposobem robienia rzeczy.
To powiedziawszy, czy są jakieś konkretne przepływy pracy lub wzorce projektowe, które są wspólne przy tworzeniu dużych funkcjonalnych aplikacji? Naprawdę chciałbym zacząć korzystać z programowania funkcjonalnego „na serio”, ale obawiam się, że przy moim obecnym braku specjalistycznej wiedzy, spowodowałoby to epicką porażkę.
„Gang of Four” jest takim standardem dla programistów OO, ale czy jest coś podobnego, co jest bardziej ukierunkowane na paradygmat funkcjonalny? Większość zasobów, które znalazłem, ma świetne samorodki programistyczne, ale nie cofają się, aby nadać szerszy, bardziej architektoniczny wygląd.
Odpowiedzi:
Tego rodzaju wzorce są zwykle objawami zepsutego, nieodpowiedniego modelu bazowego.
OOP jest zepsuty ze względu na konstrukcję, nieprzystosowany do większości jego zastosowań, dlatego zawiera wszystkie tak zwane „wzory”. Model funkcjonalny jest (tylko trochę) bardziej elastyczny, a potrzeba „wzorów” nie jest tam tak oczywista.
Gdy zaczniesz stosować podejście zorientowane na język (naturalne dla programistów funkcjonalnych), używając lub tworząc listy DSL dla każdej konkretnej domeny problemowej, przekonasz się, że w ogóle nie pojawiają się żadne wzorce, ponieważ zawsze stosujesz odpowiedni model dla opisujący problem.
Oczywiście, niektóre powtarzające się „wzorce” lub „przepisy” na wysokim poziomie są nieuniknione nawet w bardzo abstrakcyjnej, czystej i czystej matematyce, ale są innego rodzaju i mają inny poziom abstrakcji niż wzory GoF. Na przykład przydatne będą monady.
źródło
Moim osobistym zdaniem wzorce projektowe są semantyczne. Pamiętam, jak przepisałem niektóre moje stare aplikacje za pomocą MVC, aby upewnić się, że zrozumiałem wzór, tak jak myślałem. Ale ostatecznie nie zyskałem nic od MVC w stosunku do mojego oryginalnego kodu.
Gdybym jednak miał zastosować mój oryginalny kod do większego środowiska programistycznego i powiedzieć komuś, że istnieje problem z tą określoną metodą ... programistowi trudno byłoby wyśledzić ten problem. JEDNAK, gdybym powiedział, że Kontraktor Kontraktu został z jakiegoś powodu spieprzony, wiedziałby dokładnie, od czego zacząć.
Wzory projektowe są świetne ... ale jak powiedziałem, myślę, że są semantyczne!
EDYCJA: Wy, ewangeliści, załamujecie mnie. Jak powstało coś bez MVC (lub innego wzoru)!
źródło