Czy istnieją jakieś określone przepływy pracy lub wzorce projektowe, które są powszechnie używane do tworzenia dużych funkcjonalnych aplikacji programistycznych? [Zamknięte]

13

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.

Andrzej
źródło
6
Niektóre wzorce GOF są tak naprawdę tylko obejściami w językach OO dla rzeczy, które już oferuje Programowanie Funkcjonalne. Zobacz stackoverflow.com/q/327955
Robert Harvey
2
powiązane: stackoverflow.com/q/89212
holowniki
Myślę, że w tej dyskusji jest zbyt duży nacisk na wzorce specyficzne dla GoF / OOP. Czy ktoś może opublikować jakieś wzorce funkcjonalne specyficzne dla programowania funkcjonalnego (które nie tylko próbują udowodnić banalność GoF w językach funkcjonalnych)?
Daniel B

Odpowiedzi:

3

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.

Logika SK
źródło
+1 za ostatnie 2 akapity, myślę, że jest na miejscu. Jeśli chodzi o OOP, jestem ciekawy uzasadnienia nazywania go złamanym, poza tym, że jest to ogólne narzędzie często stosowane do konkretnych problemów (stąd powstają wzorce niskiego poziomu, takie jak te GoF). Czy możesz w skrócie opracować lub zamieścić link podsumowujący Twoją opinię?
Daniel B
@DanielB, nie ma nic złego w OOP per se, ale sposób, w jaki jest zwykle stosowany, jest całkowicie zepsuty. Ten model pasuje tylko do kilku rzeczywistych problemów (i naprawdę tam świeci, gdy jest odpowiednio zastosowany), ale do reszty potrzebuje wszystkich kul i taśmy izolacyjnej, aby pasować. Zobacz na przykład moją odpowiedź na stronie programmers.stackexchange.com/questions/52608/ ...
SK-logic
OK, myślę, że jestem na tej samej stronie. W rzeczywistości mogłem zadać to dokładne pytanie już raz, przepraszam za to - sposób, w jaki sformułowałeś ten wiersz, wydaje się sugerować więcej.
Daniel B,
-3

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)!

aserwin
źródło
2
semantic (sɪˈmæntɪk) - przym. 1. lub odnoszący się do znaczenia lub wynikający z rozróżnienia znaczeń różnych słów lub symboli 2. lub odnoszący się do semantyki (badanie znaczenia) 3. logika związana z interpretacją teorii formalnej, tak jak w tabelach prawdy podanych jako relacja sentymentalnych łączników
Robert Harvey
+1 - miałem na myśli, że wzorce projektowe są po prostu środkiem komunikacji!
aserwin
Wzory projektowe to coś więcej niż tylko sposób komunikacji; są to konkretne, dobrze zrozumiane przepisy, które można wdrożyć w oprogramowaniu w celu rozwiązania niektórych często spotykanych problemów.
Robert Harvey,
Tak mówią książki. Ale tak naprawdę nigdy nie rozwiązałem problemu dzięki wzorowi projektowemu, którego bez niego nie byłbym w stanie rozwiązać. Jedyną zaletą, którą zauważyłem w swoim własnym doświadczeniu, jest możliwość rozmawiania o kodzie! ;)
aserwin
1
Jeśli chodzi o edycję: czy wolisz wymyślać koło ponownie za każdym razem, gdy piszesz nowy fragment kodu?
Robert Harvey