我有一个自定义树数据类,遵循标准Composite模式。我显然不希望GUI和模型过于紧密联系,因此GUI应该是模型的Observer,并且应该通过模型层进行更改。我正在使用C#事件实现可观察的支持 - 到目前为止,非常好,我有一个工作系统。
TreeChange
中创建一个TreeChangeEventArgs
事件并对更改信息进行编码,或者您是否会为每种更新类型创建一个事件(可能还会为每个事件创建特定的EventArg类)?NodeDeleting
或NodeDeleted
?如果没有将已删除的节点作为参数,NodeDeleted
似乎对我的使用非常有限?当然,树可以在(可能)处理节点之前触发NodeDeleted
事件,但是抛出一个(至少在概念上)删除的节点是不错的做法?NodeDeleted
事件,还是递归NodeDeleted
子节点?单NoteDeleted
对我来说似乎很好,但也许有些情况我没有考虑过。Windows.Forms.TreeView
作为我的主要数据结构:)并且,奖励问题:让客户直接操纵树节点并让树本身触发事件,或者按照Service.Instance.AddNode(parentNode, "New node name")
的方式执行某些操作并让Service类负责生成事件?
答案 0 :(得分:0)
Bonus:我认为属于树的行为应该在树中,要改变它你有多态性和继承,不要使用结构设计,其中OO在OO系统中更有意义。