我一直是一個Web開發人員,現在已經開始學習一些函數式編程。和其他人一樣,我將這些概念中的許多應用於我的專業工作方面遇到了一些重大困難。對我來說,主要原因是我看到FP之間的無狀態目標之間的矛盾似乎與我所做的大多數Web開發工作都與數據庫密切相關,這些數據庫非常以數據爲中心。數據庫和函數式編程有何不同?
一兩件事讓我更富有成效開發商對事物的OOP側像MyGeneration d00dads對於.NET,Class對象關係映射器的發現:: DBI對Perl,ActiveRecord的紅寶石,等這使我不用花一天時間寫插入和選擇語句,並且專注於將數據作爲對象輕鬆處理。當然,我仍然可以在需要它們的權力時編寫SQL查詢,但否則它會在幕後很好地抽象出來。
現在,轉向功能性編程,似乎像許多FP Web框架一樣,Links需要編寫大量的樣板sql代碼,如this example。網絡鎖看起來好一點,但它似乎使用了一種OOP模型來處理數據,並且仍需要爲數據庫中的每個表手動編寫代碼,如this example。我想你使用一些代碼生成來編寫這些映射函數,但是這看起來顯然是不喜歡的。 (注意:我沒有非常仔細地查看Weblocks或Links,我可能會誤解它們是如何使用的)。
所以現在的問題是,對數據庫訪問的部分(我認爲是相當大的)Web應用程序,或其他發展需要的接口與SQL數據庫中,我們似乎壓低以下路徑之一:
- 不要使用函數式編程
- 訪問數據在一個惱人的,非抽象的方式,涉及手動編寫大量SQL或類似SQL代碼ALA鏈接
- 隊我們的功能語言爲僞OOP範式,從而消除了真正的函數式編程的一些優雅和穩定性。
顯然,這些選項都不理想。是否找到了解決這些問題的方法?這裏真的有一個問題嗎?
注:我個人最熟悉的FP前LISP,所以如果你想給任何例子,知道多FP語言,口齒不清很可能是選擇的首選語言
PS:具體問題到web開發的其他方面,請參閱this question。
另請參閱:http://stackoverflow.com/questions/218190/is-functional-to-relational-mapping-easier-than-object-to-relational – 2008-12-01 09:32:16
@WW - 謝謝,不知何故錯過了這個問題。 – 2008-12-01 09:40:46
查看ClojureQL和HaskellDB。它們是利用關係代數的抽象層。 – Masse 2011-08-05 11:34:51