我目前正在使用 Scala 进行编程,但我想这适用于任何函数式编程语言,或者更确切地说,任何建议不变性并可以与数据库交互的编程语言。
当我从数据库中获取数据时,我将其映射到模型数据结构。在函数式编程中,数据结构往往是不可变的。但是数据库中的数据是可变的,所以我想知道我的模型是否也应该是可变的。一般来说,在这种情况下,什么是良好且被广泛接受的做法?
在关注 Coursera 上 Martin Odersky 的 Scala 课程时,我记得他说过这样的话:
最好使用不可变的数据结构,但是当你想要的时候
与现实世界交互,使用可变数据可能很有用
结构。
所以,我再次想知道我应该做什么。到目前为止,我的数据结构是不可变的,当我想更新数据库中的记录时,这会导致大量样板代码。使用可变模型是否有助于减少这个样板?
(我已经问过一个类似的问题,对于我使用的技术来说非常具体 https://stackoverflow.com/questions/12882099/how-to-update-object-in-mongo-with-an-immutable-salat-case-class,但我对实际答案并不满意,所以我在这里概括了它。)
为什么数据库是可变的?可变是数据库的基本性质吗?关系模型并将其用作应用程序数据的持久性存储可能会引导您得出这个结论,但它可能不是一个基本属性。
鉴于您可能有其他选择,例如在更新数据时存储新版本的数据,也许问题的前提在某种程度上被破坏了。也许,即使您确实有一个“可变”数据库,您仍然需要为更新函数提供一个与旧值分开的新值 - 例如考虑乐观锁,其中仅当旧值已更新时才应发生更新并没有同时改变。
换句话说,数据库的可变性或其他方面根本不重要,您正在应用程序中处理单独的域层。如果你需要问,那么答案将永远是一成不变的。可变性是一个复杂性向量,只有在被证明有必要时,专家才应将其作为性能优化引入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)