12

私は現在 Scala でプログラミングしていますが、これは関数型プログラミング言語、または不変性を推奨し、データベースと対話できるプログラミング言語に当てはまると思います。

データベースからデータを取得するときは、それをモデル データ構造にマップします。関数型プログラミングでは、データ構造は不変になる傾向があります。しかし、データベース内のデータは変更可能であるため、モデルも変更可能にする必要があるかどうか疑問に思います。一般に、そのような場合によく受け入れられている慣行は何でしょうか?

Coursera での Martin Odersky による Scala コースの後、彼が次のようなことを言ったのを覚えています。

不変のデータ構造を使用することをお勧めしますが、現実の世界と対話したい場合は、可変のデータ構造を使用すると便利です。

では、どうすればいいのか、また悩んでしまいます。今のところ、私のデータ構造は不変であり、データベース内のレコードを更新したいときに、多くのボイラープレート コードが必要になります。可変モデルを使用すると、このボイラープレートを減らすのに役立ちますか?

(私が使用しているテクノロジに固有の同様の質問を既にしましたが、実際の回答に満足できなかったので、ここで一般化しました。)

4

3 に答える 3

6

なぜデータベースはミュータブルなのですか? 変更可能であることはデータベースの基本的な性質ですか? リレーショナル モデルとそれをアプリケーション データの永続ストアとして使用すると、この結論に向かうかもしれませんが、それは基本的な特性ではない可能性があります。

更新時にデータの新しいバージョンを保存するなど、他のオプションがある場合があることを考えると、おそらく質問の前提が多少損なわれます。おそらく、「変更可能な」データベースを使用している場合でも、更新関数に古い値とは別の新しい値を提供する必要があります。たとえば、古い値がその間変化なし。

言い換えれば、データベースの可変性などはまったく問題にならないはずです。アプリケーションで別のドメイン層を扱っているのです。尋ねる必要がある場合、答えは常に不変です。可変性は、必要であることが実証された場合にのみ、専門家がパフォーマンスの最適化として導入すべき複雑なベクトルです。

于 2012-10-21T08:17:47.360 に答える
5

私が現在取り組んでいる取引アプリでは、ほとんどすべてが不変です - 確かにモデルは不変です。

私たちの経験では、これにより、永続性を含むモデルの操作方法が大幅に簡素化されました。

なぜ物事がより単純になったのか、私はまだ理解していません。これについてはもっと考える必要があります。コードについての推論とその操作がより簡単になります。

はい、レンズのようなものを使用する必要がありますが、私はそれらを書く傾向があります-機械的なプロセス-そして次に進みます. それは私がフィネスできると確信している小さな部品です。

于 2012-10-21T11:21:03.903 に答える
3

「現実世界とのやり取り」は、可変データ構造を使用するか不変データ構造を使用するかとは関係ありません。これはあまりにも頻繁に繰り返されるファーフィーであり、あなたが疑問を呈したことは素晴らしいことです.

通常、このようにガベージを破棄する方が健全ですが、大雑把な暴言に興味があるかもしれません 。 /

ただし、それを却下して先に進むことを強くお勧めします。

あなたの質問に対して、不変のデータ構造に対して操作を実行したい場合、ボイラープレートがあるとあなたは言います。実際、この問題を大幅に解決する非常に確立された理論があります。Scalaを使用して書かれた論文は次のとおりです。

http://dropbox.tmorris.net/media/doc/lenses.pdf

それが役立つことを願っています。

于 2012-10-21T08:30:26.567 に答える