最后一天,我最终想到了一些收藏品的相互依赖性。
我无法提供更好的标签,名称,标题或任何暗示这种情况的东西......所以请随意提出比我便宜的标签更好的建议,即"相互依赖的馆藏修改管理"。
长话短说,下面的例子。
首先,让我们考虑几个类:
public class DummyItem
{
public DummyItem(String name)
{
this.Name = name;
}
public String Name { get; set; }
}
// A kind of repository of DummyItems
public class BusinessClassProvider
{
public BusinessClassProvider()
{
this.Collection = new List<DummyItem>();
}
public IList<DummyItem> DummyItems{ get; private set; }
}
public class BusinessClassConsumer
{
public BusinessClassConsumer()
{
this.Collection = new Collection<DummyItem>();
}
public ICollection<DummyItem> DummItems{ get; private set; }
}
现在让我们说通过一些进程,用户输入等来填充BusinessClassProvider.Collection。
BusinessClassConsumer Collection是从BusinessClassProvider Collection中选择的,让我们也说一些用户输入或任何其他方式。
现在,如果我从BusinessClassProvider集合中删除或添加DummyItem,我需要创建附加Nethods来包装或最终如果它们是一些支持的事件,以通知其他已更改的内容并相应地删除相关的其他集合(例如BusinessClassConsumer)一)也删除此项目。 基本上它意味着许多样板代码和许多手动处理的东西。
当然,我们可以使用IEnumerable作为BusinessClassConsumer Collection使用另一种策略,但它没有提供关于索引的相同选项,而且它强制在BusinessClassProvider Collection上反复迭代。
我知道它引发了更多的问题,比如哪个集合有点像提供者而其他消费来自。
是否有任何框架通过属性或任何其他令人讨厌的技巧来强制多个集合之间的依赖?
顺便说一下,有没有人知道如何正确标记这种情况?
答案 0 :(得分:0)
如果在收集更改(添加,删除项目或刷新整个集合)时需要通知您,您可能需要使用ObservableCollection。 它主要在WPF中用于在项目集合发生变化并需要刷新时通知UI。
如果您的需求是生产者/消费者集合,您可能希望寻找BlockingCollection。 它是一个线程安全的集合,可以为您完成所有生产者/消费者的事物。
答案 1 :(得分:0)
是的,有。实际上相当多,但是.net附带的ObservableCollection不是首选。相反,人们会使用Rx-Linq(反应式扩展)将可观察量,Linq和调度程序一起添加。