2010-09-28 66 views
0

我不太新到VB.Net和语法,但我不是专家。我正在重写以前用C#编写的VB中的东西,而当我这样做时,我遇到了一个“困境”。我可以有一个只读属性:VB.Net中ReadOnly属性/函数的最佳实践是什么?

Public ReadOnly Property MaximumIndenture() 
    Get 
     Try 
      'If the connection is closed, open it.' 
      If _dbConnection.State = ConnectionState.Closed Then 
       _dbConnection.Open() 
      End If 

      Dim dictFigureIndenture As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer) 
      Using dbReader As IDataReader = ExecuteReader("SELECT PART_FIGURE, MAX(PART_INDENTURE) AS 'MAX_INDENT' FROM PARTS GROUP BY PART_FIGURE") 
       While dbReader.Read() 
        dictFigureIndenture.Add(dbReader("PART_FIGURE").ToString(), Convert.ToInt32(dbReader("MAX_INDENT").ToString())) 
       End While 
      End Using 

      'If the connection is open, do what you need to and/or close it.' 
      If _dbConnection.State = ConnectionState.Open Then 
       _dbConnection.Close() 
      End If 

      Return dictFigureIndenture 
     Catch ex As Exception 
      'An exception was thrown. Show it to the user so they can report it.' 
      MessageBox.Show(ex.Message) 

      'If the connection is open, do what you need to and/or close it.' 
      If _dbConnection.State = ConnectionState.Open Then 
       _dbConnection.Close() 
      End If 

      Return Nothing 
     End Try 
    End Get 
End Property 

我能有做同样的事情的函数:

Public Function MaximumIndenture() As Integer 
    Try 
     'If the connection is closed, open it.' 
     If _dbConnection.State = ConnectionState.Closed Then 
      _dbConnection.Open() 
     End If 

     Dim dictFigureIndenture As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer) 
     Using dbReader As IDataReader = ExecuteReader("SELECT PART_FIGURE, MAX(PART_INDENTURE) AS 'MAX_INDENT' FROM PARTS GROUP BY PART_FIGURE") 
      While dbReader.Read() 
       dictFigureIndenture.Add(dbReader("PART_FIGURE").ToString(), Convert.ToInt32(dbReader("MAX_INDENT").ToString())) 
      End While 
     End Using 

     'If the connection is open, do what you need to and/or close it.' 
     If _dbConnection.State = ConnectionState.Open Then 
      _dbConnection.Close() 
     End If 

     Return dictFigureIndenture 
    Catch ex As Exception 
     'An exception was thrown. Show it to the user so they can report it.' 
     MessageBox.Show(ex.Message) 

     'If the connection is open, do what you need to and/or close it.' 
     If _dbConnection.State = ConnectionState.Open Then 
      _dbConnection.Close() 
     End If 

     Return Nothing 
    End Try 
End Function 

他们基本上都做同样的事情,但我不知道这将是在社区更受欢迎。最后,我想写很多开源代码供大家使用(大部分可能已经写过),但我绝对不希望有人认为我所做的是最佳做法。任何人都可以给我一个外行的描述,哪个更好用,为什么?对不起,如果这是一个重复的帖子给别人的,只是好奇。谢谢。

+0

btw。有免费的工具从C#转换为VB,看看这里http://www.developerfusion.com/tools/convert/csharp-to-vb/ – elsni 2010-09-28 12:12:15

+0

@elsni - :)谢谢。但是我只是因为以前的C#版本不是最好的,所以我只能手工编写它。所以当我经历它并将其转换时,我正在改变事物。我一定会保存那个链接。 – XstreamINsanity 2010-09-28 12:15:49

回答

5

这绝对应该是一种方法,而不是一个属性。

属性通常包含轻量级操作,例如获取私有变量的值并可能执行一些简单的计算或转换。从数据库中提取数据的东西肯定不符合通常预期的属性。

+0

这就是我的想法。但我也在想:“嗯,它们允许你把代码放在那里,不只是简单的回报,为什么不呢?”而且我知道我甚至可以在那里放置断点。我也不知道它是否出于美学原因。感谢您的回应。 – XstreamINsanity 2010-09-28 12:14:57

+0

同意上面,另外我会说一个函数可能有副作用(做一些改变其他地方的状态或数据),但一个属性永远不应该。 – MikeG 2010-09-28 12:17:21

+1

只读属性在语言,可调试性等方面与功能一样强大。您的决定是关于美学的决定。即当另一位程序员使用你的财产或功能时,他们预期会发生什么...... – MikeG 2010-09-28 12:18:49

0

我不能答应你,这是最好的做法,但我会说你觉得你更自然,在现实世界中更有意义。我会说MaximumIndenture会比一个函数做出更好的属性,因为在我看来,它更多的是对象属性或属于它的名词。我会使用一个函数来做更多的操作或动词,从而得到一些结果。那些是我的2美分。希望能帮助到你!

+0

:)这完全是我的困境。是的,我可以使用“GetMaximumIndenture”函数,但我不会因为这样做而失去任何东西,但美学上是明智的,如果它是对象的一部分,MaximumIndenture感觉和听起来更好。 – XstreamINsanity 2010-09-28 12:17:58

1

使用的方法,而不是一个性质, 如果操作比字段访问 会慢 数量级。特别是访问网络的操作 或文件系统应该可能是方法。

您的代码访问数据库:所以它应该是一个方法。

从。 NET Framework Design Guidelines第二版第135页

+0

谢谢。我只是在寻找DVD,因为有人在网站上说,它可以免费从发布商的网站下载,但我不再看到它了。我不确定我是否同意我在书中看到的一件事,但是,哈哈。我不喜欢在线的末尾放置一个开口支架。看起来并不适合我。 :) – XstreamINsanity 2010-09-28 13:03:45

+0

@Xstream DVD的主要内容是关于设计类库的视频演示。它在研究频道应该是[可用](http://www.researchchannel.org/index.asp),但令人遗憾的是,研究频道似乎正在衰落。 如果你不能决定把你的大括号放在哪里,只需切换到VB。在毫无意义的论点上花费更少的时间,并且你也可以避免使用右手小指的RSI! :) MarkJ 2010-09-28 15:13:16

+0

大声笑。是的,每个人都告诉我切换到VB,但可能是因为我的学校教育,C#感觉很自然。和大括号似乎更有组织。但那只是我的个人意见。我可以拿起那本书,但看起来很不错。 – XstreamINsanity 2010-09-28 16:38:58