0

以下のコードを見てください。

    Imports System.Data.SqlClient
Public Class Person
    Private id As String
    Private name As String

    Public Function check(ByVal personid As String) As Boolean
        'Do some checks on the person to see if it is ready for deletion
    End Function

    Public Shared Sub Delete()
        Dim v As New Vehicle
        Dim p As New Person
    End Sub
End Class

Public Class Vehicle
    Private vrm As String

    Public Function check(ByVal vehicleid As String) As Boolean
        'Do some checks on the vehicle to see if it is ready for deletion
    End Function

    Private Shared Sub Delete()
        Dim p As New Person
        Dim v As New Vehicle
        Dim objCommand As SqlCommand
        Dim objCon As SqlConnection
        Dim objDR As SqlDataReader
        Try
            Dim _ConString As String = "Data Source=IANSCOMPUTER;Initial Catalog=Test;Integrated Security=True;MultipleActiveResultSets=true"
            objCon = New SqlConnection(_ConString)
            objCommand = New SqlCommand("SELECT * FROM Person were startdate < dateadd(year,-6," & Now & ")")
            objDR = objCommand.ExecuteReader
            Do While objDR.Read
                If p.check(objDR("id")) And v.check(objDR("vehicleid")) Then
                    'Execute delete statement, which deletes the person and vehicle
                End If
            Loop
            objDR.Close()
            objCommand.Connection = objCon
            objCon.Open()
            objCommand.ExecuteNonQuery()
        Catch ex As Exception
            Throw
        Finally

        End Try
    End Sub

End Class

共有関数 (Person.Delete) には Person と Vehicle への参照が含まれており、Person と Vehicle でインスタンス変数を使用していることに注意してください。基本的に、人物と車両を削除する前に、人物と車両に対してチェックを行う必要があります。

Shared 関数から Person と Vehicle を参照するのは不適切ですか? Delete 関数でインスタンス変数を使用するのはお粗末ですか。削除機能は、毎日何千人もの人や車を削除します。

4

1 に答える 1

1

それらを共有することは必ずしも悪い習慣ではありませんが、共有する場合は、それらを独自のクラスにリファクタリングすることをお勧めします。Shared私の考えでは、クラス署名を汚染してはならないグローバル関数を即座に作成します。

したがって、これは私の推定ではより良い方法です:

Public Class Person
    Private id As String
    Private name As String
End Class

Public Class Vehicle
    Private vrm As String
End Class

Public Class PersonVanisher
    Public Shared Sub Delete()
        Dim v As New Vehicle
        Dim p As New Person
        ...
    End Sub

    Public Shared Function Check(personId As String) As Boolean
        ...
    End Function
End Class

Public Class VehicleCrusher
    Private Shared Sub Delete()
        Dim p As New Person
        Dim v As New Vehicle
        ...
    End Sub

    Public Shared Function Check(vehicleId As String) As Boolean
        ...
    End Function
End Class

人々はこれについて哲学的な議論をしますが、それが私のコードであれば、私は何も共有しません。必要なときに「新規作成」し、VehicleCrusher完了したらすぐに.NETにすべてを破棄させたいと思います。

于 2013-03-26T20:34:30.507 に答える