関数型のプログラムを設計するときは、単一のオブジェクトで動作する関数の基本層を設計することを考えます。次に、それらのオブジェクトのコレクションを操作する必要がある場合は、マッピング、フィルタリング、リダクションなどの従来の機能的な接着剤を使用してベースレイヤの上に構築を開始します。関数型のDBバックアップアプリケーションの設計
たとえば、私はDBバックアップアプリケーションユーザーとタスクがあり、ユーザーにはタスクが割り当てられています。
私はdef doesUserPerformTask?(taskId, userId)
// Go to DB to see if this userId does this taskId
// return userid if success or else nil
end
のように定義された機能を有していてもよいその後の道を、私は、ユーザーIDのリストを与えられたタスクX.パーフェクトを行い、それらのどれかを知りたいのですが、私はすでに機能doesUserPerformTask?
を持って
それはコード内の他の箇所でテストされているので、ユーザーIDリストをマップして、それぞれの関数を呼び出して結果をフィルタリングすることができます。
これは機能的な設計の大きな利点ですが、マップに渡された各要素(つまりユーザーID)にはDBヒットが必要な効率の問題があります。私は今、userIdのリストで動作するまったく新しい関数を作成する必要があります。
DBバックアップされたプログラムを機能スタイルで設計するときに、この問題にぶつかります。ここでは、機能の基本レイヤーを構築せず、両方のために特別に書かれたたくさんの関数単一のアイテムおよびアイテムのコレクションで操作する。
機能型で記述されたDBバックアッププログラムを整理するためのより良い方法はありますか?
他にもありません*? FPの強い訴訟ではないものもあります。それにもかかわらず、熱狂。 – cHao
ソリッドステートドライブが安価/高速/大容量になると、RAM /ディスク間の境界がぼやけ、パフォーマンスの低下がなくなり、提案するプログラミングのスタイルが理にかなっています。その間、キャッシュはどうですか? – Eduardo