سؤال

لدينا درجة عالية من التخصص الدال الذي يجلس على ديسيبل.لدينا تطبيقات تحتاج إلى استخدام هذا الدال تعمل بشكل صحيح ضد هذا ديسيبل.

ولدت الدال (التي تقع على بعض مخصص قاعدة الطبقات) وقد المختلفة 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, هناك خاصية إضافية مما يشير إلى إن قيمة حاليا فارغة.

وهكذا....

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

يعمل هذا لأن منشئ الفئة مجموعات كل NULLproperties الحقيقية وتحديد أي FieldProperty سوف يسبب أي ما يعادل NullProperty إلى أن يتم تعيين إلى false.

كان لي مؤخرا بحاجة إلى فضح بلدي الدال على شبكة الإنترنت من خلال خدمة ويب (الذي بالطبع تنوي آمنة) و قد اكتشفت ذلك حين هيكل Rec فئة لا تزال سليمة من خلال شبكة الإنترنت...كل المنطق هو خسر..

إذا كان هناك شخص لتشغيل السابقة قطعة من التعليمات البرمجية عن بعد فإنها تلاحظ أن أي حالة من شأنها أن تثبت صحيح حيث لا يوجد جانب العميل رمز مجموعات فارغة إلى true.

أشعر أن لدي بالحلول هذا خطأ ولكن لا يمكن أن نرى كيف يجب تحسينه.

ما هو الطريق الصحيح مهندس هذا ؟

هل كانت مفيدة؟

المحلول

لست متأكدا إذا أنا أفهم تماما هذا السؤال ، ولكن هل يمكن أن يكون nullable أنواع البيانات في XML.

لذلك هذا...

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

نواتج هذا (مع nullable المناطق)

<?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>

نصائح أخرى

خدمات الويب تهدف إلى فضح العملية(طرق) & بيانات العقود ولكن ليس الداخلية تنفيذ المنطق.هذا هو "شيء جيد" في عالم service-oriented architecture.السيناريو الذي وصف بعيد/توزيع وجوه العمارة.خدمات الويب لن تدعم ما كنت تحاول القيام به.يرجى الاطلاع على هذه بعد للحصول على مزيد من المعلومات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top