나는 한동안 웹 개발자였으며 최근에 함수형 프로그래밍을 배우기 시작했습니다. 다른 사람들과 마찬가지로 저는 이러한 개념 중 많은 부분을 전문 작업에 적용하는 데 상당한 어려움을 겪었습니다. 저에게있어 주된 이유는 무국적 상태를 유지하려는 FP의 목표 사이의 충돌이 제가 수행 한 대부분의 웹 개발 작업이 매우 데이터 중심적인 데이터베이스에 크게 묶여 있다는 사실과 상당히 상충되는 것 같습니다.
OOP 측면에서 저를 훨씬 더 생산적인 개발자로 만든 것은 MyGeneration d00dads for .Net, Class :: DBI for perl, ActiveRecord for ruby 등과 같은 객체 관계형 매퍼의 발견이었습니다. 하루 종일 insert 및 select 문을 작성하고 데이터를 개체로 쉽게 작업하는 데 집중합니다. 물론 파워가 필요할 때도 SQL 쿼리를 작성할 수 있었지만 그렇지 않으면이면에서 멋지게 추상화되었습니다.
이제 기능 프로그래밍으로 전환하면 링크와 같은 많은 FP 웹 프레임 워크 에서이 예제 와 같이 많은 상용구 SQL 코드를 작성해야하는 것처럼 보입니다 . Weblocks는 조금 더 좋아 보이지만 데이터 작업을 위해 일종의 OOP 모델을 사용하는 것 같으며이 예제 에서와 같이 데이터베이스의 각 테이블에 대해 수동으로 코드를 작성해야합니다 . 이러한 매핑 함수를 작성하기 위해 일부 코드 생성을 사용한다고 가정하지만 이는 확실히 리스프와 같지 않은 것 같습니다.
(참고로 Weblocks 또는 링크를 자세히 살펴 보지 않았습니다. 사용 방법을 오해하고있을 수 있습니다.)
따라서 질문은 웹 응용 프로그램의 데이터베이스 액세스 부분 (매우 큰 것으로 생각됨) 또는 SQL 데이터베이스와의 인터페이스가 필요한 기타 개발의 경우 다음 경로 중 하나를 강제로 내리는 것 같습니다.
- 함수형 프로그래밍을 사용하지 마십시오
- 많은 수의 SQL 또는 SQL과 유사한 코드를 수동으로 작성해야하는 성가신 비 추상적 인 방식으로 데이터에 액세스합니다.
- 함수형 언어를 의사 OOP 패러다임으로 강제하여 진정한 함수형 프로그래밍의 우아함과 안정성을 일부 제거합니다.
분명히 이러한 옵션 중 어느 것도 이상적이지 않습니다. 이러한 문제를 피할 수있는 방법을 찾았습니까? 여기에 정말 문제가 있습니까?
참고 : 저는 개인적으로 FP 전면에서 LISP에 가장 익숙하므로 예제를 제공하고 여러 FP 언어를 알고 싶다면 lisp가 선호되는 언어 일 것입니다.
추신 : 웹 개발의 다른 측면과 관련된 문제는 이 질문을 참조하십시오 .