- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 CAD 应用程序,其中有 block 实体。每个 block 实体都有一个子实体列表。 When these entities are rendered, every block entity knows about its child entity (as it can figure out the child entity in the list), and hence when block entity is selected, the whole block entity along with its child entities gets selected. However, child entity does not know the parent block and other child entities of that block, and due to this when child entity is selected, I cannot get the whole block entity along with all its child entities selected.
为了解决这个问题,我在子实体中创建了一个属性来保存父 block 实体的引用。但是,交叉引用可能会出现一些问题,并使我的数据结构容易出错。
例如:使用复制命令,几天后处理这些数据结构的人可能会在创建子实体副本时复制同一个父实体。但是,新副本应该属于其他父 block 。
请建议实现此关系的更好方法,以便在选择子实体时我可以选择整个 block 实体及其所有子实体。
public class BlockEntity
{
public List<ChildEntity> Children = new List<ChildEntity>();
}
public class ChildEntity
{
public readonly BlockEntity Parent;
}
最佳答案
我最近遇到了这个问题。我和其他与我交谈过的人提出了两个选择:
Parent<-->Child
做你正在做的事关系,双方都了解对方。Parent-->Child
关系,让一切都由 parent 来处理。两者都是可行的解决方案,但都有各自的问题。第一种情况,即您正在做的事情,似乎更好,Microsoft 似乎将其与他们的 TreeView/TreeNode
一起使用和 DataTable/DataRow/etc.
例如对象,因为它们每个都可以引用回各自的父对象。
也许对父级添加约束,例如不允许直接访问父级的子集合,但只允许 AddChild
您可以在其中进行必要链接的功能。或者按照@Irfan 的建议做,让 child 要求您将父级传递给它的构造函数。也限制您的复制方法,但始终记录所有内容以尽可能消除困惑。
上面例子中的后面的例子要容易一些,因为所有的东西总是从父级访问的。这是我们的解决方案。我们在 parent 中有很多函数来检查和管理其中的 children。因此,在这种情况下,您可以在 CAD 应用程序中选择 child ,然后转到 parent 并检查他们的收藏,看看 child 是否存在。如果是,则选择父项和其余子项。
这取决于您,但在每种情况下,您都需要添加约束和错误检查,以确保事情的发生尽可能接近您期望的方式。希望这会有所帮助。
关于c# - 实现亲子关系的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19791652/
如果我有类似 categoryA -> subcategoryA--> 书籍关系的 pojo。子类别 A 是父类别 A 的子类别。 book 是 subcategoryA 的 child 在这种情况下
我是一名优秀的程序员,十分优秀!