gpt4 book ai didi

c# - 将通用数据结构映射到特定数据结构的模式

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:45 25 4
gpt4 key购买 nike

我有一个层次化的通用数据结构。有一个根节点,在它下面可以有很多树节点,也可以只有一个数据节点,树节点可以有更多的树节点。一个基本的树结构。

我系统中的所有数据都以这种格式保存。但是,我确实希望为这些数据结构所代表的一些不同类型的数据提供强类型接口(interface)(即将通用层次树转换为强类型地址记录)。

我计划使用一种适配器模式,我将一个节点传递给适配器,然后它通过询问树来公开属性。这也将允许我验证树(即具有特定元素并且它们中包含有效数据)。它还允许可扩展性(即,如果以后添加了其他数据,树本身也会公开)。

您认为这是实现此目标的最佳方法还是有更简单的方法?

注意:这是在 C# 和 .Net 4.0 中。

谢谢!

最佳答案

Adapter 通常用来桥接两个incompatible interfaces .这似乎不是你的问题。事实上,我真的没有看到任何问题——因为对象语言本质上是分层的,您应该能够在类和树节点之间使用大多数一对一的映射。

也许您所说的“适配器”只是指一个包装节点或任何描述树节点的特定对象类型的类,我同意。应该有相当明显的父子关系,您可以通过让您的节点类拥有或以某种方式返回子节点/类的数组以及作为 getter/setter 的属性来描述。任何需要的验证都可以由 setter 完成,或者如果需要在构造期间作为一个类检查给定节点及其子节点。类似于以下内容:

public class NodeFu {

private Node node;

public NodeFu(Node node){
this.node = node;
// perhaps traverse and validate node data here
}

public String getNodeAttribute(String attrName){
// pardon the offense, Demeter, only for demonstration...
return node.getAttributes().getNamedItem(attrName).toString();
}

public void setNodeAttribute(String attrName, attrValue){
node.setAttributeValue(attrName, attrValue);
}

public ArrayList<NodeFu> getChildren(){
ArrayList<NodeFu> children = new ArrayList<NodeFu>();
for (Node childNode : node.getChildNodes()){
children.add(new NodeFu(childNode));
}
return children;
}
}

我假设您有更多业务逻辑要添加到此类,这些逻辑将操作 Node 本身上的数据,否则 Node 类就足够了,您可以直接使用它。

关于c# - 将通用数据结构映射到特定数据结构的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2219930/

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