Data Transfer Object Pattern Goes VB.NET
Here is a simple example for the Data Transfer Pattern (DTO) Pattern in VB.NET. The task for using this pattern is the following:
The client must not know the details about the structure of business objects on the server side. However, the client must be able to work with all data from the business objects.
We write an example for a business report. The report contains two business objects:
- ContractObject
- BusinessPartnerObject
Our solution has a service-oriented architecture and the client gets only ONE object from the service with all datas from both business objects. We call this a Data Transfer Object (DTO).
The DTO looks like this:
Public Class ReportDTO
Private m_contractname As String = ""
Private m_contractdate As Date = Nothing
Private m_businesspartner As String = ""
Public Property ContractName() As String
Get
Return Me.m_contractname
End Get
Set(ByVal value As String)
Me.m_contractname = Value
End Set
End Property
Public Property ContractDate() As Date
Get
Return Me.m_contractdate
End Get
Set(ByVal value As Date)
Me.m_contractdate = Value
End Set
End Property
Public Property BusinessPartner() As String
Get
Return Me.m_businesspartner
End Get
Set(ByVal value As String)
Me.m_businesspartner = Value
End Set
End Property
End Class
And the business objects are here:
Public Class ContractBDO
Private m_contractname As String = ""
Private m_contractdate As Date = Nothing
Public Property ContractName() As String
Get
Return Me.m_contractname
End Get
Set(ByVal value As String)
Me.m_contractname = Value
End Set
End Property
Public Property ContractDate() As Date
Get
Return Me.m_contractdate
End Get
Set(ByVal value As Date)
Me.m_contractdate = Value
End Set
End Property
End Class
Public Class BusinessPartnerBDO
Private m_businesspartner As String = ""
Public Property BusinessPartner() As String
Get
Return Me.m_businesspartner
End Get
Set(ByVal value As String)
Me.m_businesspartner = Value
End Set
End Property
End Class
The client is now able to fill the DTO with necessary data and send it back to the service. The service has an assembler that is able to transport the date from the DTO to the expected business object and the reverse.
And, here is our assembler:
Public Class ReportAssembler
Public Shared Function MakeContractObject(ByVal dto As ReportDTO) _
As ContractBDO
Dim obj As New ContractBDO
obj.contractname = dto.contractname
obj.contractdate = dto.contractdate
Return obj
End Function
Public Shared Function MakeBusinessPartnerObject(ByVal dto _
As ReportDTO) As BusinessPartnerBDO
Dim obj As New BusinessPartnerBDO
obj.businesspartner = dto.businesspartner
Return obj
'Reverse Methods go here
End Class
The service call from the client side looks like this:
Public Class ReportService
'Example for writing the objects from the DTO
Public Sub WriteObjects(ByVal dto As ReportDTO)
Dim trans As Transaction 'Example only
Dim objContract As ContractBDO = _
ReportAssembler.MakeContractObject(dto)
Dim objBusinessPartner As BusinessPartnerBDO = _
ReportAssembler.MakeBusinessPartnerObject(dto)
trans.AddWriteObject(objContract)
trans.AddWriteObject(objBusinessPartner)
trans.Execute()
End Sub
End Class
The advantage is that the client gets only one object and only the service task has to fill the two database relations. The client is always stupid and knows nothing about the data structure in the background.