gpt4 book ai didi

c# - C# 中的数据继承

转载 作者:行者123 更新时间:2023-11-30 15:12:42 25 4
gpt4 key购买 nike

是否有一种已知的模式可以继承分层对象结构中的数据?我有一个分层的“项目”结构,需要从其“父级”继承其“类型”(具有与默认数据相同的数据)。子项的类型可以自己修改,当父项的类型改变时,所有类型没有改变的子项都应该得到父项的新类型。

请注意,我不能伪造它

public string Type
{
get
{
if (type == null)
return Parent != null ? Parent.Type : null;

return type;
}
}

'因为我必须在数据库中填充值,而且结构太深无法使用递归并且不担心性能。

我现在唯一能想到的就是

public string Type
{
set
{
type = value;
UpdateUnchangedChildren(value);
}
}

public int AddChild(Item item)
{
item.Type = Type;
return Items.Add(item);
}

有没有更好的方法?谢谢。

最佳答案

这是一个常见问题,通常与维护各种分层设置/配置有关。所以,我想它的解决方案可以被认为是“一种模式”。

无论如何,从内部架构的角度来看,您有两个主要选择:

  • 标准化结构
  • 非规范化结构

“Normazlied”是用递归实现的。一段特定的数据总是存储在一个地方,所有其他地方都有对它的引用(例如,对父级)。该结构很容易更新,但从中读取可能会出现问题。

“非规范化”意味着每个节点都将存储其级别的整套设置,并且每当您更新节点时,都需要一些时间沿着层次结构向下移动并校正所有子节点。但是读取操作是即时的。

因此“非规范化”版本似乎被更广泛地使用,因为设置的常见场景是你很少更新它们,而经常读取它们,因此你需要更好的读取性能。例如,Windows ACL security model使用“非规范化”方法来快速进行安全检查。您可以阅读他们如何 resolve conflicts between the "inherited" and explicit permissions (ACEs) by checking them in a specific order .不过,这对您的特定系统来说可能有点矫枉过正,您可以简单地标记一个特定值被覆盖的标志,或者相反,重置为“默认值”...

更多细节取决于您的系统需求,您可能希望拥有一个“混合”架构,其中一些字段将被“规范化”,而另一些则不会。但你似乎走对了路。

关于c# - C# 中的数据继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/886691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com