منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : تحويل Interface الي دوال API
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
فكرة الموضوع تتلخص في تحويل الواجهات Interface الي دوال
حيث يتم اخفاء الكود الحقيقي الذي يقوم بالتنفيذ
وهنا يتم استخدام Interface كبديلا للكلاس الحقيقي الموجود به الكود

كتابة الكود الخاص لأي Interface
PHP كود :
Public Interface IStringAccessor
    Function Access
() As String
End 
Interface 

ثم نقوم بعمل Implement للواجهة Intereface في اي كلاس

PHP كود :
Friend Class StringAccessor
    Implements IStringAccessor

    Private value 
As String
    Private accessorFunc 
As Func(Of StringString)

 
   Public Sub New(value As Stringfunc As Func(Of StringString))
 
       Me.value value
        Me
.accessorFunc func
    End Sub

    Public 
Function Access() As String Implements IStringAccessor.Access
        Return Me
.accessorFunc(Me.value)
 
   End Function

End Class 


كتابة الكلاس الذي يحتوي علي دوال API
حيث الهدف هنا استدعاء الواجهة Interface عن طريق تمرير الكلاس الأصلي و الموجود به الكود الفعلي


PHP كود :
Public NotInheritable Class AccessorAPI

    Public Shared 
Function Access(value As String) As IStringAccessor
        Return 
New StringAccessor(value, Function(ss)
 
   End Function

End Class 

الإستخدام
فقط تستدعي الواجهة Interface


PHP كود :
     Dim accessor As IStringAccessor AccessorAPI.Access("Visual Basic")
 
       If accessor IsNot Nothing Then
            Me
.Text accessor.Access
        End 
If 

من الممكن دمج الكود الخاص بدوال API و الكلاس StringAccessor ليصبح بالشكل التالي

PHP كود :
Public NotInheritable Class AccessorAPI

    Public Shared 
Function Access(value As String) As IStringAccessor
        Return 
New StringAccessor(value, Function(ss)
 
   End Function

 
   Private Class StringAccessor
        Implements IStringAccessor

        Private value 
As String
        Private accessorFunc 
As Func(Of StringString)

 
       Public Sub New(value As Stringfunc As Func(Of StringString))
 
           Me.value value
            Me
.accessorFunc func
        End Sub

        Public 
Function Access() As String Implements IStringAccessor.Access
            Return Me
.accessorFunc(Me.value)
 
       End Function

 
   End Class

End Class 

الكلاس أعلاه يمكن تعميمه عن طريق استخدام Generic
حيث يمكن كتابة الواجهة Interface بالشكل التالي

PHP كود :
Public Interface IAccessor(Of T)
 
   Function Access() As T
End 
Interface 

PHP كود :
Public NotInheritable Class Accessor(Of T)

 
   Public Shared Function Access(value As T) As IAccessor(Of T)
 
       Return New InternalAccessor(value, Function(xx)
 
   End Function

 
   Private Class InternalAccessor
        Implements IAccessor
(Of T)

 
       Private _value As T
        Private _accessor 
As Func(Of TT)

 
       Public Sub New(value As Tfunc As Func(Of TT))
 
           Me._value value
            Me
._accessor func
        End Sub

        Public 
Function Access() As Implements IAccessor(Of T).Access
            Return Me
._accessor(Me._value)
 
       End Function
 
   End Class

End Class 

الإستخدام

PHP كود :
       Dim accessor As IAccessor(Of String) = AccessorAPI.Access("any String")
 
       If accessor IsNot Nothing Then
            Me
.Text accessor.Access
        End 
If 

أتمني أن تكون الفكرة مفيدة للبعض منكم
تقبلوا تحياتي
السلام عليكم
ممكن شرح أوفر لموضوع الـ API
ازاي اخلي البرنامج بتاعي ( ERP ) يدعم الـ API بحيث يمكن لطرف ثالث ( جهة حكومية مثلا ) الوصول لبعض البيانات المطلوبة عن طريق برامج وسيطة
علما بأنه تم تصميم البرنامج بلغة vb وقواعد بيانات Access
وشكرا