2

OOPのバックグラウンドから来て、関数型プログラミングにおける不変のオブジェクト/レコード/メッセージの概念にいくつかの問題があります。

各関数がこのレコードのデータを追加または更新することになっている関数のパイプラインを介してPurchaseOrderレコードを渡すとします。

可変状態を処理するときは、渡されるメッセージの特定のプロパティを設定するだけです。

不変のレコードを扱うとき、この問題で物事を簡単にするいくつかの設計上のトリックはありますか?1つのフィールドだけを変更するためにすべてのフィールドをコピーするのは、面倒です。

{ A = x.A ; B = x.B ; C = x.C ; D = x.D ; E = somethingnew; }

データをできるだけグループ化することは、データを処理するための良い方法だと思います。したがって、すべてのフィールドをコピーすることは避けてください。これに関する他の方法や設計ガイドラインはありますか?

4

2 に答える 2

9

あなたはただすることができます

 let myRecord3 = { myRecord2 with Y = 100; Z = 2 }

(MSDNレコードページの例-http://msdn.microsoft.com/en-us/library/dd233184.aspx

于 2012-07-09T09:38:51.513 に答える
0

私は非常に純粋で過激なOOPのバックグラウンドを持っており、私のOOPデザインは99%不変のオブジェクトになる傾向があります(突然変異を許可する言語でも)。各関数がレコード内のデータを追加または更新することになっている関数のパイプラインがある場合、私の経験では、各関数はそのレコードのサブ問題とサブコンセプトを処理するため、それぞれにクラス/タイプ/その他を作成する必要がありますSRPSoCなどのOOPのベストプラクティスに従うもの。クラス/レコード/タイプに4つまたは5つを超えるフィールド/変数/属性がある場合は、おそらくそこにあまりにも多くの責任を負っていると思います。問題をいくつかのサブ問題に分割すると、ピップラインの各関数がレコードのサブレコードを作成し、メイン関数がそれらすべてを組み合わせてメインレコードを作成します。私の経験では、従来のOOPに従うことで、変更なしで達成したいことを達成できる設計になります。

于 2012-07-10T02:54:11.240 に答える