F#-如何在数据库中有效存储和加载DU /记录树

时间:2018-12-29 22:33:21

标签: sql-server serialization f# deserialization

我使用F#DU /记录树为业务域建模。它像一种魅力一样工作,并且可以做它应该做的事情。典型的树深度约为2-5。现在,我需要在数据库中保留一些参数(我们称它们为settings),然后在启动时加载它们。设置数大约为100。我还需要能够在SQL中编辑单个设置,这意味着将整个树序列化为JSON或类似的东西看起来很不方便。

但是,业务领域在当前阶段是不稳定的。那意味着树可能并且将“重新平衡”。这意味着某些参数将在此处移动和/或重命名/添加/删除。这进一步意味着直接在SQL中建模F#对象(F#类型X-> SQL表X)将使开发时间加倍(如果不是更多的话)。

一种选择是创建一个“公共坟墓”,它是一个包含所有设置的表,然后使用由树的各个部分组成的长字符串键(例如object1.object2.object3…),以便获得特定设置。

我想知道是否有更好的解决方案。非常感谢!

1 个答案:

答案 0 :(得分:2)

基本上,您需要将域与任何持久性方案或机制隔离开。这绝不是“靠魔术”完成的,而是靠(映射)您编写和维护的代码来完成的。

因此,将域保留为域(在这里永远不要考虑持久性),并将持久性作为一个单独的问题来解决。

如果如您在问题中所述,能够在数据库中手动设置各个设置很重要,那么完全平坦的架构是正确的选择。然后编写映射器Domain -> DBDB -> Domain