DB の上にある高度に専門化された DAL があります。アプリは、この DB に対して正しく動作するために、この DAL を使用する必要があります。
生成された DAL (いくつかのカスタム基本クラスに配置されます) には、さまざまな「Rec」クラス (Table1Rec、Table2Rec) があり、それぞれが特定のテーブルのレコード構造を表します。
これがサンプルの疑似クラスです...
Public Class SomeTableRec
Private mField1 As String
Private mField1isNull As Boolean
Private mField2 As Integer
Private mField2isNull As Boolean
Public Sub New()
mField1isNull = True
mField2isNull = True
End Sub
Public Property Field1() As String
Get
Return mField1
End Get
Set(ByVal value As String)
mField1 = value
mField1isNull = False
End Set
End Property
Public ReadOnly Property Field1isNull() As Boolean
Get
Return mField1isNull
End Get
End Property
Public Property Field2() As Integer
Get
Return mField2
End Get
Set(ByVal value As Integer)
mField2 = value
mField2isNull = False
End Set
End Property
Public ReadOnly Property Field2isNull() As Boolean
Get
Return mField2isNull
End Get
End Property
End Class
各クラスには、各フィールドのプロパティがあります...したがって、次のように記述できます...
Dim Rec as New Table1Rec
Table1Rec.Field1 = "SomeString"
Table2Rec.Field2 = 500
フィールドが NULL 値を受け入れることができる場合、値が現在 null であるかどうかを示す追加のプロパティがあります。
したがって....
Dim Rec as New Table1Rec
Table1Rec.Field1 = "SomeString"
If Table1Rec.Field1Null then
' This clearly is not true
End If
If Table1Rec.Field2Null then
' This will be true
End If
これが機能するのは、クラスのコンストラクターがすべての NULL プロパティを True に設定し、任意の FieldProperty を設定すると、同等の NullProperty が false に設定されるためです。
私は最近、Web サービスを介して Web 経由で DAL を公開する必要がありました (もちろんこれはセキュリティで保護するつもりです)。「Rec」クラスの構造が Web 経由でそのまま残っていることを発見しました...すべてのロジックは失った..
誰かが前のコードをリモートで実行すると、null を true に設定するクライアント側のコードがないため、どちらの条件も true ではないことに気付くでしょう。
これをすべて間違って設計したような気がしますが、どのように改善すればよいかわかりません。
これを設計する正しい方法は何ですか?