Data Transfer Object Pattern Goes VB.NET

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.



Comments

  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Wednesday, September 24, 2014 8:00 AM - 9:00 AM PDT According to a recent Forrester Research report, many companies are choosing low-code platforms over traditional programming platforms, due to the speed with which low-code apps can be assembled and tested. With customer-facing applications on the rise, traditional programming platforms simply can't keep up with the "short schedules and rapid change cycles" required to develop these applications. Check out this upcoming webinar and join Clay Richardson from …

  • The explosion in mobile devices and applications has generated a great deal of interest in APIs. Today's businesses are under increased pressure to make it easy to build apps, supply tools to help developers work more quickly, and deploy operational analytics so they can track users, developers, application performance, and more. Apigee Edge provides comprehensive API delivery tools and both operational and business-level analytics in an integrated platform. It is available as on-premise software or through …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds