Tôi đã là nhà phát triển web được một thời gian và gần đây đã bắt đầu học lập trình chức năng. Giống như những người khác, tôi đã gặp một số rắc rối đáng kể khi áp dụng nhiều khái niệm này vào công việc chuyên môn của mình. Đối với tôi, lý do chính cho điều này là tôi thấy mâu thuẫn giữa mục tiêu duy trì trạng thái không trạng thái của FP dường như khá mâu thuẫn với thực tế rằng hầu hết các công việc phát triển web mà tôi đã thực hiện đều gắn chặt với cơ sở dữ liệu, vốn rất tập trung vào dữ liệu.
Một điều khiến tôi trở thành nhà phát triển năng suất hơn nhiều ở khía cạnh OOP là việc phát hiện ra các trình ánh xạ quan hệ đối tượng như MyGeneration d00dads cho .Net, Class :: DBI cho perl, ActiveRecord cho ruby, v.v. Điều này cho phép tôi tránh xa từ việc viết các câu lệnh chèn và chọn cả ngày, và tập trung làm việc với dữ liệu dễ dàng dưới dạng các đối tượng. Tất nhiên, tôi vẫn có thể viết các truy vấn SQL khi sức mạnh của chúng là cần thiết, nhưng nếu không thì nó đã được trừu tượng hóa một cách độc đáo.
Bây giờ, chuyển sang lập trình chức năng, có vẻ như với nhiều khuôn khổ web FP như Liên kết yêu cầu viết rất nhiều mã sql soạn sẵn, như trong ví dụ này . Weblocks có vẻ tốt hơn một chút, nhưng nó dường như sử dụng loại mô hình OOP để làm việc với dữ liệu và vẫn yêu cầu mã được viết theo cách thủ công cho mỗi bảng trong cơ sở dữ liệu của bạn như trong ví dụ này . Tôi cho rằng bạn sử dụng một số cách tạo mã để viết các hàm ánh xạ này, nhưng điều đó có vẻ không giống với người nói ngọng.
(Lưu ý rằng tôi chưa xem xét các Weblocks hoặc các Liên kết một cách kỹ lưỡng, có thể tôi đang hiểu sai về cách chúng được sử dụng).
Vì vậy, câu hỏi đặt ra là, đối với các phần truy cập cơ sở dữ liệu (mà tôi tin là khá lớn) của ứng dụng web hoặc sự phát triển khác yêu cầu giao diện với cơ sở dữ liệu sql, chúng tôi dường như buộc phải xuống một trong các đường dẫn sau:
- Không sử dụng lập trình chức năng
- Truy cập Dữ liệu theo cách khó chịu, không trừu tượng liên quan đến việc viết thủ công nhiều mã SQL hoặc SQL giống như các Liên kết
- Buộc Ngôn ngữ chức năng của chúng tôi vào một mô hình giả OOP, do đó loại bỏ một số tính sang trọng và ổn định của lập trình chức năng thực sự.
Rõ ràng, không có lựa chọn nào trong số này có vẻ lý tưởng. Đã tìm ra một cách để tránh những vấn đề này? Có thực sự là một vấn đề ở đây?
Lưu ý: Cá nhân tôi quen thuộc nhất với LISP ở mặt trận FP, vì vậy nếu bạn muốn đưa ra bất kỳ ví dụ nào và biết nhiều ngôn ngữ FP, lisp có thể sẽ là ngôn ngữ được ưu tiên lựa chọn
Tái bút: Đối với Các vấn đề cụ thể cho các khía cạnh khác của phát triển web, hãy xem câu hỏi này .