none
Classe com propriedades que são outras classes RRS feed

  • Pergunta

  • Salve!

    No meu projeto Web em VB2005 tenho uma classe (clsModelo) que tem como uma das propriedades uma outra classe, conforme abaixo:

    Public Class clsModelo
    
      Private _modeloID As Int16
      Public Property modeloID() As Int16
        Get
          Return _modeloID
        End Get
        Set(ByVal value As Int16)
          _modeloID = value
        End Set
      End Property
    
      Private _modeloDescricao As String
      Public Property modeloDescricao() As String
        Get
          Return _modeloDescricao
        End Get
        Set(ByVal value As String)
          _modeloDescricao = value
        End Set
      End Property
    
      Private _fabricante As DTO.clsFabricante
      Public Property fabricante() As DTO.clsFabricante
        Get
          Return _fabricante
        End Get
        Set(ByVal value As DTO.clsFabricante)
          _fabricante = value
        End Set
      End Property
    End Class
    
    
    Public Class clsFabricante
    
      Private _fabricanteID As Int16
      Public Property fabricanteID() As Int16
        Get
          Return _fabricanteID
        End Get
        Set(ByVal value As Int16)
          _fabricanteID = value
        End Set
      End Property
    
      Private _fabricanteDescricao As String
      Public Property fabricanteDescricao() As String
        Get
          Return _fabricanteDescricao
        End Get
        Set(ByVal value As String)
          _fabricanteDescricao = value
        End Set
      End Property
    End Class
    

    Na classe de acesso ao banco tem um método para retornar os modelos:

      Public Function ListarModelo() As List(Of DTO.clsModelo)
    
        Dim col As New List(Of DTO.clsModelo)
        Dim con As New OleDbConnection(conStr)
        Dim SQL As String = "ListarModelo"
        Dim cmd As New OleDbCommand(SQL, con)
        cmd.CommandType = CommandType.StoredProcedure
    
        Try
          con.Open()
          Dim dr As OleDbDataReader = cmd.ExecuteReader
          While dr.Read
            Dim oObj As New DTO.clsModelo
            oObj.modeloID = dr("modeloID")
            oObj.modeloDescricao = dr("modeloDescricao")
            oObj.fabricante = New DAL.Fabricante().LocalizarFabricante(dr("fabricanteID"))
            col.Add(oObj)
          End While
        Catch ex As Exception
          Throw ex
        Finally
          con.Close()
        End Try
    
        Return col
      End Function
    

    A minha dúvida é se é correto esse tipo de abordagem pois para cada modelo que é listado é preciso abrir uma outra conexão como banco para obter as informações de fabricante.

    Além do que, querendo listar modelos num GridView, eu terei que criar um TemplateField para poder mostrar o fabricante associado ao modelo.

    Não seria mais eficiente se eu tivesse na classe clsModelo as propriedades necessárias de fabricante (como na suposição abaixo) e as obtivesse diretamente da query do banco?

    Public Class clsModelo
    
      Private _modeloID As Int16
      Public Property modeloID() As Int16
        Get
          Return _modeloID
        End Get
        Set(ByVal value As Int16)
          _modeloID = value
        End Set
      End Property
    
      Private _modeloDescricao As String
      Public Property modeloDescricao() As String
        Get
          Return _modeloDescricao
        End Get
        Set(ByVal value As String)
          _modeloDescricao = value
        End Set
      End Property
    
      Private _fabricanteID As Int16
      Public Property fabricanteID() As Int16
        Get
          Return _fabricanteID
        End Get
        Set(ByVal value As Int16)
          _fabricanteID = value
        End Set
      End Property
    
      Private _fabricanteDescricao As String
      Public Property fabricanteDescricao() As String
        Get
          Return _fabricanteDescricao 
        End Get
        Set(ByVal value As String)
          _fabricanteDescricao = value
        End Set
      End Property
    End Class

    Isso é no caso de uma única propriedade ser uma outra classe. E quando houver mais de uma propriedade sendo classe? Os "custos"  ainda assim compensam?

    Grato pela atenção de todos.

    Paulo Ricardo Ferreira

    quinta-feira, 6 de janeiro de 2011 15:02

Respostas

  • Creio que em VB deve ser como em C#:

    class C1{
    
    	int id{get;set;}
    
    	string qualquercoisa{get;.set;}
    
    }
    
    class C2{
    int id2{get;set;}
    C1 outraClass {get;set;}
    
    public C2{
    outraClass = new C1();
    
    }
    
    boa sorte

    • Sugerido como Resposta Priscila Mayumi Sato quarta-feira, 16 de fevereiro de 2011 14:11
    • Marcado como Resposta Harley Araujo sexta-feira, 18 de fevereiro de 2011 13:14
    quarta-feira, 16 de fevereiro de 2011 13:42