I'm working on some testing project. For some reason I think I'm doing something wrong with the architecture. I have a simple example to show what I mean.
Database class
Imports DAO
Imports System.Data.SqlClient
Public Class PatientDB
    Dim connectionString As String = "Data Source=GSABBOZMAINPC;Initial Catalog=TestDB;Integrated Security=True"
    Public Function GetAllPatientFromDB() As List(Of PatientDAO)
        Using connection As New SqlConnection(connectionString)
            Dim list As New List(Of PatientDAO)
            Dim sqlString As String = "select * from patient ;"
            Using Command As New SqlCommand(sqlString, connection)
                connection.Open()
                Using reader As SqlDataReader = Command.ExecuteReader
                    While reader.Read
                        Dim firstName As String = reader("firstnamePT").ToString()
                        Dim Name As String = reader("naamPT").ToString()
                        Dim patient As New PatientDAO(Name, firstName)
                        list.Add(patient)
                    End While
                End Using
                Return list
            End Using
        End Using  
    End Function
End Class
PatientDAO
Public Class PatientDAO
    Private _name As String
    Private _lastname As String
    Sub New(naam As String, lastname As String)
        _name = naam
        _lastname = lastname
    End Sub
    Public ReadOnly Property Name As String
        Get
            Return _name
        End Get
    End Property
    Public ReadOnly Property Lastname As String
        Get
            Return _lastname
        End Get
    End Property
End Class
Patient
Imports DAO
Imports database_layer
    Public Class Patient
        Property naam As String
        Property lastname As String
        Sub New()
        End Sub
        Sub New(_naam As String, _lastname As String)
            naam = _naam
            lastname = _lastname
        End Sub
        Public Sub New(patientDAO As PatientDAO)
            naam = patientDAO.Name
            lastname = patientDAO.Lastname
        End Sub
        Public Function GetDO() As PatientDAO
            Return New PatientDAO(naam, lastname)
        End Function
        Public Function getAllPatientsInList() As List(Of Patient)
            Dim list As New List(Of Patient)
            Dim database As New PatientDB
            For Each PatientDAO As PatientDAO In database.GetAllPatientFromDB()
                Dim patient As New Patient(PatientDAO)
                list.Add(patient)
            Next
            Return list
        End Function
        Public Overrides Function ToString() As String
            Return naam + " " + lastname
        End Function
    End Class
In this example I'm using Windows form. When the form is loaded I use the following event:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load Dim patient As New Patient For Each item As Patient In patient.getAllPatientsInList() list.Add(item) Next End Sub
Should I use Dim patient As New Patient with an empty constructor like this example or should I approach this another way? And are there other suggestions you think would improve the architecture of this example?
