为什么使用公共属性而不是函数来公开自定义集合<t> </t>

时间:2009-07-06 02:13:45

标签: vb.net properties

在代码审查期间,我查看了一组存储库类(在vb.net中)。我习惯于看到这些存储库类充满了返回域对象集合(以及其他内容)的函数。但是,此存储库有1个公共属性和1个私有变量,如下所示:

Private _item as Collection (of Customer)

Public Item as Collection (of Customer)
   Get...
   Set...

在“获取”中,有一些代码从DAL获取客户并将其加载到私有_item中。

使用属性(customerRepository.Item)而不是普通旧函数(customerRepository.GetAllCustomers)会带来什么好处? “财产”方式对我来说很奇怪,但奇怪并不总是意味着错误。

3 个答案:

答案 0 :(得分:3)

我同意在访问任何类型的DAL的setter中进行操作是不好的做法。

根据MSDN Property Usage Guidelines,必须在以下情况下使用方法:

  
      
  • 操作非常昂贵,您希望与用户沟通,他们应该考虑缓存结果。
  •   
  • 使用get访问器获取属性值会产生可观察到的副作用。
  •   

很明显,使用上述属性违反了该指南。

答案 1 :(得分:2)

在此示例中,getter返回整个集合,并允许用户从中获取项目。在存储库模式中,存储库是集合,您使用集合语义与它进行交互,以获取存储库应该持有的实体的特定实例。

此实现的危险在于此API的用户可以使用其他集合替换集合。在我看来,这是不好的做法

答案 2 :(得分:0)

如果你的意思是在Get(而不是Setter)中“有代码从DAL获取客户并将其加载到私有_item”,那么我已经看到代码已经完成,但是有检查私有_item是否为null。然后它变成一个缓存,它只在第一次访问时从DAL中读取。每隔一次直接从私有_item返回。

当然,您也可以在GetAllCustomers中执行缓存方案。