【发布时间】:2011-10-16 00:49:23
【问题描述】:
基本上,我一直认为您应该尽可能返回公开的基类型,并担心内部的实现细节,这是有道理的...
但是,我不确定在这里做什么。基本上,现在我有:
ReadOnlyObservableCollection<Foo> MyFoos {get; private set; }
我想知道是否应该将其作为ReadOnlyCollection<Foo> 或ICollection<Foo> 返回,因为在内部我从未真正使用任何可观察的部分或尝试写入集合。 WPF 似乎不在乎我返回什么,它仍然绑定它并正确触发集合更改通知事件。但是,我在某处读到,我应该将其设计为真正让任何消费视图处理我的 ViewModel。
所以我在这里有点伤心。我认为将其保留为ReadOnlyObservableCollection<T> 最有意义的是明确告诉消费视图他们可以和不可以对该属性做什么,但我也认为您应该将类型减少到他们的基础尽可能输入。所以我不确定在这里做什么。尤其是 WPF 不关心我返回什么类型这一事实,它发现它是可观察的。
【问题讨论】:
-
根据 Jeffrey Richter 的说法,为了给调用者提供最大的灵活性,你的参数应该尽可能的基础(例如,当你所做的只是枚举列表时,使用 IEnumerable 而不是 List
)并且您的返回应该尽可能具体(即,当您返回 List 时,调用者可以将其视为 List 、IList、ICollection 、IEnumerable 等) -
哦,所以它的参数尽可能少,返回尽可能具体。
-
是的,这是我尝试遵循的一个不错的经验法则。
标签: c# wpf mvvm observablecollection readonly-collection