Frage

Wir haben eine hoch spezialisierte DAL, die über unsere DB sitzt. Unsere Anwendungen benötigen diese DAL verwenden, um richtig gegen diese DB zu arbeiten.

Die erzeugte DAL (die auf einige benutzerdefinierte Basisklassen sitzt) hat verschiedene ‚Rec‘ Klassen (Table1Rec, Table2Rec), von denen jeder die Aufzeichnungsstruktur einer gegebenen Tabelle darstellt.

Hier ist ein Beispiel Pseudo-Klasse ...

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

Jede Klasse hat Eigenschaften für jedes der Felder ... Ich kann also schreiben ...

Dim Rec as New Table1Rec
Table1Rec.Field1 = "SomeString"
Table2Rec.Field2 = 500

Wenn ein Feld einen Nullwert annehmen kann, gibt es eine zusätzliche Eigenschaft, die anzeigt, wenn der Wert zur Zeit null ist.

So ....

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

Das funktioniert, weil der Konstruktor der Klasse alle NULLproperties auf True setzt und die Einstellung jeglicher FieldProperty wird dazu führen, dass die äquivalente NullProperty auf false gesetzt werden.

Ich habe vor kurzem hatte das Bedürfnis, meine DAL über das Internet über einen Web-Service zu belichten (was ich natürlich zu sichern beabsichtige) und habe entdeckt, dass, während die Struktur der ‚Rec‘ Klasse intakt bleibt über das Internet ... alle Logik verloren ..

Wenn jemand das vorherige Stück Code auszuführen waren fern würden sie feststellen, dass keine der beiden Bedingungen wahr erweisen würde, da es keine Client-Seite Code, der auf true null setzt.

Ich habe das Gefühl, ich architected habe dies alles falsch, aber kann nicht sehen, wie ich sollte es verbessern.

Was ist der richtige Weg, um Architekten das?

War es hilfreich?

Lösung

Nicht sicher, ob ich die Frage verstehen, aber Sie können auf NULL festlegbare Datentypen in XML haben.

Also das ...

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols

<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Testing
     Inherits System.Web.Services.WebService

    <WebMethod()> _
   Public Function GetObjects() As Generic.List(Of TestObject)
        Dim list As New Generic.List(Of TestObject)
        list.Add(New TestObject(Nothing, "Empty ID Object"))
        list.Add(New TestObject(1, "Full ID Object"))
        list.Add(New TestObject(2, Nothing))
        Return list
    End Function

    Public Class TestObject
        Public Sub New()
            _name = String.Empty
            _id = Nothing
        End Sub
        Public Sub New(ByVal id As Nullable(Of Integer), ByVal name As String)
            _name = name
            _id = id
        End Sub
        Private _name As String
        Public Property Name() As String
            Get
                Return _name
            End Get
            Set(ByVal value As String)
                _name = value
            End Set
        End Property

        Private _id As Nullable(Of Integer)
        Public Property ID() As Nullable(Of Integer)
            Get
                Return _id
            End Get
            Set(ByVal value As Nullable(Of Integer))
                _id = value
            End Set
        End Property
    End Class

End Class

gibt diese (mit Nullable-Bereich)

<?xml version="1.0" encoding="utf-8" ?> 
<ArrayOfTestObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
 <TestObject>
  <Name>Empty ID Object</Name> 
  <ID xsi:nil="true" /> 
 </TestObject>
 <TestObject>
  <Name>Full ID Object</Name> 
  <ID>1</ID> 
 </TestObject>
 <TestObject>
  <ID>2</ID> 
 </TestObject>
</ArrayOfTestObject>

Andere Tipps

Web-Service ist so konzipiert, Betrieb (Methoden) und Datenverträge belichten, aber nicht interner Implementierung Logik. Dies ist eine „gute Sache“ in der Welt der serviceorientierten Architektur. Das Szenario, das Sie beschreiben, ist ein Remote / verteilte Objektarchitektur. Web-Dienste nicht unterstützen, was Sie zu tun versuchen. finden Sie in diesem Post für weitere Informationen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top