我有一个表单,允许用户为记录输入新数据。为了维护数据完整性,我将所有预先存在的数据(如果有)复制到记录中,并仅覆盖用户已添加新数据的那些字段。此新记录将保存到数据库并删除旧记录。
我只是想找到最有效的方法来完成每个领域:
我需要编写相同类型的Check for String,Decimal,Date和Integer(都可以为空)
这是我的字符串检查
Private Function CreateRecordforSubmission() As Business.Casualty
Dim c As Business.Casualty = Casualty
c.alias = CheckStringValues(c.alias, txtAlias.Text.Trim())
Return c
End Function
Private Function CheckStringValues(OldValue As String, newValue As String) As String
If Not OldValue Is Nothing AndAlso Not String.IsNullOrEmpty(newValue) Then
'<-- There is NEW DATA
If Not String.IsNullOrEmpty(newValue) Then
Return newValue
Else
'<-- No NEW DATA, check of there is CURRENT DATA to maintain
If Not OldValue Is Nothing Then
Return OldValue
Else
Return String.Empty
End If
End If
Else
'<-- NO CURRENT DATA AND no changes have been made
Return String.Empty
End If
End Function
答案 0 :(得分:1)
了解CSLA是如何做到的。对象中的每个属性都可以处理该比较,如果setter检测到更改或新值,则可以更新变量并将对象标记为已修改。
Public Property Alias As String
Get
Return _alias
End Get
Set(ByVal value As String)
If Not String.IsNullOrEmpty(value) AndAlso _alias <> value Then
_alias = value
_objectWasModified = True
End If
End Set
End Property
If语句可以在基类中,也可以在辅助类中。
如果你想为其他类型设置泛型函数,这是一个例子。这假设您使用的是可空值。
Public Property Number As Integer?
Get
Return _number
End Get
Set(ByVal value As Integer?)
If Not IsNullOrSame(Of Integer)(_number, value)Then
_number= value
_objectWasModified = True
End If
End Set
End Property
Public Function IsNullOrSame(Of T As Structure)(ByVal oldValue As Nullable(Of T), ByVal newValue As Nullable(Of T))
If newValue.HasValue Then
If Not oldValue.HasValue OrElse Not oldValue.Value.Equals(newValue.Value) Then
Return False
End If
End If
Return True
End Function