تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مدخل عملي لـ N-Tier - التطبيقات المُتعددة الطبقات
#9
السلام عليكم ورحمة الله وبركاته

نستطيع أن نقسم طبقة الأعمال كما قسمنا طبقة البيانات إلى قسمين .


القسم الأول : الدوال العامة . و التي يتعامل معها المستخدم (المبرمج) و هي الطبقة العلوية للكائن .
القسم الثاني : الداول المحلية . و التي تقع بين الدوال العامة و الإجراءات المخزنة ، وهي الطبقة السفلية للكائن .



في المشاركة السابقة بدأنا في الدوال المحلية للفئة Person و الآن نكمل الدوال المحلية و نسرد دوال الفئة ContactNumber .

بدون شرح هي كالتالي :

PHP كود :
#Region "Private Functions"
    
Private Function _Save(ByVal PersonID As Integer_
                           ByVal Type 
As CallType_
                           ByVal Number 
As String) As Integer
        Dim insCMD 
As New SqlClient.SqlCommand
        
Try

            
With insCMD
                
.Connection Me._Connection
                
.CommandType CommandType.StoredProcedure
                
.CommandText "sp_Add_ContactNumber"
                
.Parameters.Add("@PersonID"SqlDbType.Int).Value PersonID
                
.Parameters.Add("@Type"SqlDbType.Int).Value Type
                
.Parameters.Add("@Number"SqlDbType.NVarChar255).Value Number

            End With

            Dim paramID 
As New SqlClient.SqlParameter("@ID"System.Data.SqlDbType.BigInt)
            
paramID.Direction System.Data.ParameterDirection.Output
            insCMD
.Parameters.Add(paramID)

            
Dim con As New SqlClient.SqlConnection(Me.Connection.ConnectionString)
            If 
Me.Connection.State ConnectionState.Open Then Me.Connection.Close()
            
Connection.Open()
            
insCMD.ExecuteNonQuery()
            
Connection.Close()

        Catch 
ex As Exception

        End 
Try

        Return 
CType(insCMD.Parameters("@ID").Value.ToString(), Integer)

    
End Function
    Private Function 
_Update(ByVal ID As Integer_
                             ByVal PersonID 
As Integer_
                             ByVal Type 
As CallType_
                             ByVal Number 
As String) As Integer
        Dim i 
As Integer
        
Try
            
Dim UpdCmd As New SqlClient.SqlCommand
            With UpdCmd
                
.Connection Me.Connection
                
.CommandType CommandType.StoredProcedure
                
.CommandText "sp_Update_ContactNumber"
                
.Parameters.Add("@ID"SqlDbType.BigInt).Value ID
                
.Parameters.Add("@PersonID"SqlDbType.Int).Value PersonID
                
.Parameters.Add("@Type"SqlDbType.Int).Value Type
                
.Parameters.Add("@Number"SqlDbType.NVarChar255).Value Number
            End With
            
If Connection.State ConnectionState.Open Then Connection.Close()
            
Connection.Open()
            
UpdCmd.ExecuteNonQuery()
            
Connection.Close()

        Catch 
ex As Exception

        End 
Try

        Return 
i

    End 
Function
    Private Function 
_Delete(ByVal Id As Integer) As Integer

        Dim i 
As Integer
        
Try
            
Dim delCmd As New SqlClient.SqlCommand
            With delCmd
                
.Connection Connection
                
.CommandType CommandType.StoredProcedure
                
.CommandText "sp_Delete_ContactNumber"
                
.Parameters.Add("@Id"SqlDbType.BigInt).Value Id
            End With
            
If Connection.State ConnectionState.Open Then Connection.Close()
            
Connection.Open()
            
delCmd.ExecuteNonQuery()
            
Connection.Close()

        Catch 
ex As Exception

        End 
Try

        Return 
i
    End 
Function
    Private Function 
_Select(ByVal ID As Integer) As DataTable

        Dim dsv 
As New DataTable
        
Try
            
Dim SelCmd As New SqlClient.SqlCommand
            SelCmd
.CommandType CommandType.StoredProcedure
            SelCmd
.CommandText "sp_Select_ContactNumber"
            
SelCmd.Parameters.Add("@Id"SqlDbType.BigInt).Value ID

            SelCmd
.Connection Connection
            Dim dAdapter 
As New SqlClient.SqlDataAdapter(SelCmd)

            
dAdapter.Fill(dsv)

        Catch 
ex As Exception

        End 
Try

        Return 
dsv
    End 
Function

#End Region 


بعد ذلك نبدأ في الدوال العامة .

و هي الداول التي سيستدعيها المستخدم مثل دالة Save و الخاصة بالحفظ و Delete الخاصة بالحذف .


ما ستقوم به هذه الدوال هو :
استدعاء الدوال المحلية و تمرير خصائص الكائن لها كبارميترات .


و عليه ، ستكون دالة الحفظ في الكائن Person كالتالي :


PHP كود :
Function Save() As Integer

        
Return Me._Save(Me._PersonIDMe._TypeMe._Number)

    
End Function 


ستعيد الدالة عدد الأسطر المتأثرة ، 1 في حال النجاح و صفر في حال الفشل .



أما دالة التعديل فهي كالتالي :


PHP كود :
Function Update() As Integer

        
Return Me._Update(Me._IDMe._PersonIDMe._TypeMe._Number)

    
End Function 
النتيجة ستكون نفس الدالة السابقة .



أما الحذف فهي كالتالي :

PHP كود :
Function Delete() As Integer

        
Return Me._Delete(Me._ID)

    
End Function 

القيمة العائدة نفس الكلام في الدالتين السابقتين .



تبقى دالة العرض Select ؟

هذا محتاجة شوي تركيز عشان كذا نأجلها في مشاركة مستقلة .


أرفق لكم الحل حسب أخر تحديث .
كما أرفق لكم ملف كامل لبناء الجداول و الإجراءات المخزنة في قاعدة البيانات .
http://www.elfouadsoft.com
mohamed_tegara@yahoo.com
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
مدخل عملي لـ N-Tier - التطبيقات المُتعددة الطبقات - بواسطة senior - 02-10-12, 05:46 PM


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم