none
Duvida de Orientação a Objetos RRS feed

  • Pergunta

  • Olá Pessoal,

    Gostaria de saber qual é o modo correto de modelar os objetos de minha aplicação.

    Vejam esta situação:
    * Usei os nomes no singular e plural para diferenciar um objeto/registro de uma coleção com varios objetos/registros.

    Para uma tabela tb_cidades possuo as seguintes classes/objetos para manipular a tabela:
    Cidade.aspx.vb, Cidades.aspx.vb, Cidade.vb, Cidades.vb e "Dados.vb" este último é uma classe generica de que atende a varias outras situações e possui metodos para executar Instruções SQL no banco.

    A Classe Cidade.aspx.vb é a tela de inclusão / edição de um registro.
    A Classe Cidades.aspx.vb é a tela de consulta onde exibo varios registros num GridView e após clicar em um registro direciona para a tela Cidade.aspx.vb (no singular) para editar o registro.

    A Classe Cidade.vb é a classe de negócio da classe Cidade.aspx.vb e por manipular um registro possui uma propriedade para cada campo da tabela tb_cidades.

    A Classe Cidades.vb é a classe de negócio da classe Cidades.aspx.vb e por manipular varios registros possui uma função que retorna uma coleção da classe Cidade.vb. Esta coleção serve para popular o GridView da tela de consulta.

    Minha dúvida é: Qual o local correto para colocar os metodos Gravar() e Excluir() pois dependendo da escolha terei prós e contras.

    Se optar por colocar os metodos na classe de negocio Cidade.vb que atende a tela Cidade.aspx.vb onde manipula um registro tenho a vantagem de instanciar apenas um objeto no botão btnGravar da tela, ou seja instancio a classe Cidade.vb, atribuo o valor de cada propiedade e chamo metodo Gravar()

    Se Optar por colocar os metodos na classe de negocio Cidades.vb que atende a tela de consulta tenho que instanciar duas classes no Click do botão btnGravar 1º instancio a classe Cidade.vb e atribuo o valor de cada propiedade depois instancio a Classe Cidades.vb e chamo o metodo Gravar() passando como parametro o objeto Cidade.vb que corresponde a cidade que será gravada.

    1ª Observação: Olhando esta 1ª situação fica evidente que os metodos deveriam estar na classe Cidade.vb e instanciar apenas um objeto, porem as desvantagens de criar os metodos nesta classe aparecem na tela de consulta Cidades.aspx.vb.

    Considerando que os metodos estejam na classe Cidade.vb o metodo GetAllCidades() da classe Cidades.vb retorna uma coleção da classe Cidade.vb que será usado para popular o GridView e cada objeto desta coleção possui os metodos Gravar() e Excluir() que não serão usados, retornando assim um objeto teoricamente mais pesado.

    Já se os metodos Gravar() e Excluir() estivessem na Classe Cidades.vb junto com o metodo GetAllCidades() a coleção de Cidades usada para popular o GridView teria somente as propiedades para prencher o GridView sem carregar metodos desnecessários.

    Por favor, gostaria de saber qual é a forma correta de Programar Orientado a Objetos, pois para mim que vim vo VB6 este está sendo o 2º obstaculo, o primeiro foi conhecer a nova linguagem, aprendi bastante em meu 1º projeto em .Net porém programei semelhante ao VB6 agora estou fazendo um projeto pessoal pequeno mas muito importante para eu criar minha plataforma, definir padrões e como modelar os Objetos dentro do projeto.

    Muito Obrigado,

    Edson Parizoti Junior.

    domingo, 29 de outubro de 2006 00:48

Respostas

  • Vi muitas implementações que fazem as duas coisas: Aceitam gravar apenas um objeto ou uma coleção inteira, fazendo um overload. De vez em quando você vai precisar de um, de vez em quando de outro.

    Algumas implementam isso em um Service Layer e não diretamente na entidade. Eh uma outra forma de fazer, ajuda se você estiver trabalhando algo mais estilo SOA.

    • Marcado como Resposta Richard Juhasz terça-feira, 4 de janeiro de 2011 21:10
    segunda-feira, 22 de janeiro de 2007 22:10