Od jakiegoś czasu jestem programistą WWW, a ostatnio zacząłem uczyć się programowania funkcjonalnego. Podobnie jak inni, miałem poważne problemy z zastosowaniem wielu z tych koncepcji w mojej pracy zawodowej. Dla mnie głównym powodem tego jest to, że widzę konflikt między celem FP, jakim jest pozostanie bezpaństwowcem, wydaje się zupełnie sprzeczne z faktem, że większość prac związanych z tworzeniem stron internetowych, które wykonałem, była mocno związana z bazami danych, które są bardzo skoncentrowane na danych.
Jedną rzeczą, która sprawiła, że stałem się znacznie bardziej produktywnym programistą po stronie OOP, było odkrycie obiektów mapowania relacyjnego, takich jak MyGeneration d00dads dla .Net, Class :: DBI dla perla, ActiveRecord dla ruby itp. To pozwoliło mi trzymać się z daleka. od pisania instrukcji wstawiania i wybierania przez cały dzień i skupiania się na łatwej pracy z danymi jako obiektami. Oczywiście nadal mogłem pisać zapytania SQL, gdy potrzebna była ich moc, ale poza tym było to ładnie abstrakcyjne za kulisami.
Teraz, przechodząc do programowania funkcjonalnego, wydaje się, że wiele frameworków internetowych FP, takich jak Links, wymaga napisania wielu standardowych kodów sql, jak w tym przykładzie . Weblocks wydaje się trochę lepszy, ale wydaje się, że używa pewnego rodzaju modelu OOP do pracy z danymi i nadal wymaga ręcznego napisania kodu dla każdej tabeli w twojej bazie danych, jak w tym przykładzie . Przypuszczam, że używasz generowania kodu do pisania tych funkcji mapujących, ale wydaje się to zdecydowanie nie do lispa.
(Uwaga: nie przyjrzałem się bardzo uważnie blokom stron internetowych ani łączom, może po prostu nie rozumiem, jak są one używane).
Tak więc pytanie brzmi: w przypadku części dostępu do bazy danych (które moim zdaniem są dość duże) aplikacji internetowej lub innych programów wymagających interfejsu z bazą danych sql, wydaje się, że jesteśmy zmuszeni przejść jedną z następujących ścieżek:
- Nie używaj programowania funkcyjnego
- Uzyskaj dostęp do danych w irytujący, nieabstrakcyjny sposób, który obejmuje ręczne pisanie dużej ilości kodu SQL lub podobnego do SQL ala Linki
- Zmusić nasz język funkcjonalny do paradygmatu pseudo-OOP, usuwając w ten sposób część elegancji i stabilności prawdziwego programowania funkcjonalnego.
Oczywiście żadna z tych opcji nie wydaje się idealna. Znalazłeś sposób na obejście tych problemów? Czy naprawdę jest jakiś problem?
Uwaga: Osobiście najlepiej znam LISP na froncie FP, więc jeśli chcesz podać jakieś przykłady i znać wiele języków FP, prawdopodobnie preferowanym językiem byłby lisp
PS: W przypadku problemów specyficznych dla innych aspektów tworzenia stron internetowych zobacz to pytanie .