继承SortedDictionary - 这是一个很好的编程实践吗?

时间:2012-12-11 20:07:38

标签: .net vb.net oop

例如,假设我需要分析/输出给用户的数据库中有大量日期的一组餐馆的大量数据。

所以,在我的代码中,我有一个自定义类,用于保存每个日期的每个餐馆的数据 - 例如:

Public Class DateData
    Public Property Var1 As Double = 0
    Public Property Var2 As Double = 0
    Public Property Var3 As Double = 0
    Public Property Var4 As Double = 0

    Public Sub Sub1()
      ....
    End Sub

   ... etc ....
End Class

由于我获取了每个日期的数据(因为日期顺序对我的计算很重要),我也设置了以下类(大部分工作/计算完成):

Public Class RestaurantData
    Inherits SortedDictionary(Of Date, DateData)

   Public Property Name As String
   Public Property RestaurantLevelData1 As Double = 0
   Public Property RestaurantLevelData2 As Double = 0

   Public Sub New(ByVal strName As String, ByVal DatesList As List(Of Date))
       _Name = strName
       For Each daDate As Date In DatesList
           Me.Add(daDate)
       Next
   End Sub

   Public Overloads Sub Add(ByVal daDate As Date)
        MyBase.Add(daDate, New DateData)
   End Sub

   Public Sub Sub1()
       For i As Integer = 0 To Me.Keys.Count - 1
           Dim daDate As Date = Me.Keys(i)
           Me(daDate).Sub1()
           .... etc ....
       Next
   End Sub

   ... etc ....
End Class

而且,最后,因为这是针对大量的餐馆,我有一个班级,在餐厅层面上持有这本词典 - 例如:

Public Class RestaurantsDict
    Inherits Dictionary(Of String, RestaurantData)

   Public Overloads Sub Add(ByVal strName As String, ByVal Dates As List(Of Date))
       MyBase.Add(strName, New RestaurantData(strName, Dates))
   End Sub
End Class

好的,现在我已经设置了这个,我有两个主要问题:

  1. 这是一个很好的设置方法吗? 我的原始代码包含数十个Dictionary(Of String, SortedDictionary(Of Date, Double)) 但我是一个相当新手的程序员,并且很想知道我想要实现的目标是否有更高效的架构。

  2. 我目前正在设置它的方式非常难以调试 - 例如,我的Count的{​​{1}}属性会引发RestaurantData类型的异常。

  3. 总的来说,这个解决方案运作得非常好,但我想从中学习如何成为一个更好的.Net& OOP程序员。

    谢谢!

1 个答案:

答案 0 :(得分:2)

这基本上只是意见,所以它不适合这个网站,但这是一个很好的问题。

简单的答案是它根本没有任何问题,但它肯定没有必要,所以它取决于情况是否值得。例如,通常没有理由使用IntegerStringGuid之外的任何内容来表示某种ID。但是,如果担心有人可能很容易在UserId和EmployeeId之间混淆,那么为每个人制作自己的特定类型可能是值得的,这样你就不会意外地传递错误的类型。但通常情况下,你不会想要增加额外的混淆。

对于通用集合,我通常会说没有理由这样做,但是当你有列表列表时,我可以看到尝试简化它的愿望,如果没有别的只是为了节省类型名称的冗长语法。

当你考虑到这一点时,如果泛型不存在(例如在.NET 1.0中),你将 来定义你自己的自定义类型,很明显,泛型只是一个问题方便。所以,如果只使用Dictionary(Of String, SortedDictionary(Of Date, Double))更方便,那么就这样做,但如果从那里派生自己的类更方便,那就去做吧。