エキスパートのScala開発者に電話します!書き込み可能なデータストアを表す大きなオブジェクトがあるとします。この一般的なJavaのようなアプローチに満足していますか?
val complexModel = new ComplexModel()
complexModel.modify()
complexModel.access(...)
またはあなたは好きですか:
val newComplexModel = complexModel.withADifference
newComplexModel.access(...)
それを好み、モデルにアクセスするクライアントがいる場合、クライアントは、complexModelではなくnewComplexModelを指すことをどのように知るのでしょうか。ユーザーの観点からは、変更可能なデータストアがあります。その視点をScalaの不変性の強調とどのように調和させますか?
これはどう:
var complexModel = new ComplexModel()
complexModel = complexModel.withADifference
complexModel.access(...)
これは最初のアプローチに少し似ていますが、withADifference内のコードは、既存のオブジェクトを変更するのではなく、まったく新しい複雑なデータオブジェクトを作成する必要があるため、modify()内のコードよりも多くの作業を行う必要があるようです。 。(不変性を維持するためにさらに多くの作業を行う必要があるというこの問題に遭遇しましたか?)また、これで、スコープが大きいvarができました。
最善の戦略をどのように決定しますか?選択する戦略に例外はありますか?