我想域作爲記錄和識別聯合,即不可變模型的關係。我注意到,我有一個m:n的關係,比如作者和書籍。而現在我正在尋找表達它的一個很好的方式,使得:如何表達在F#
- 理想不變
- 一本書改變一個屬性是很容易,那就是,如果我想創建一個副本,我不不必遍歷所有作者
- 訪問很簡單;理想情況下作者有書籍清單
到目前爲止,我沒有找到任何解決方案實現所有的標準。我發現的是:
- 每個作者都有一個書目清單(我並不需要相反的方向)。這允許方便地訪問和是不可改變的,但是改變對一本書的性質需要改變每一個作者日期
- 持有的書籍REF細胞的不可變列表,每個作者都有裁判細胞的不可變列表。這使得改變一個屬性容易,並且訪問很容易,但是這實際上並不是不可變的,因爲ref單元不是不可變的。
- 持有的書籍不可變列表和每個作者有ID的不可變列表。這是不可改變的,並且對書籍進行更改變得簡單,但是訪問更加困難,因爲您需要執行查找,並且您可能有一個不存在的ID。
是否有任何解決方案可以滿足上述所有要求,或許像不可變的參考單元?如果是這樣,他們看起來像什麼。
如果你做出'Book'可變的變化,能夠性質似乎簡單。任何理由不? – Daniel
請注意,如果您有作者的不可變列表並將其映射到其上,則實際上並未最終複製所有作者。不改變的作者只是指向同一個實例(所以不可變解決方案的開銷並不大)。 –
我不害怕運行時開銷,實際上,我更想知道如何以某種功能方式進行類似別名的操作。到目前爲止,我認爲讓它變得可變是最簡單的。問題是這樣的:假設你寫了3本書,每本書都是作爲你的作者,現在你改變了你的地址。我現在不得不在每本書中改變你的地址嗎?如果你是可變的,通過改變你的地址,我隱式更新所有書籍。但是,如何以功能性的方式實現相同的功能呢? –