none
Classes RRS feed

  • Pergunta

  •  

    Galera não sei se é bem aqui o topico que vou postar, mas gostaria de saber como eu posso modelar minhas classes através da modelagem do banco de dados já existente. Existe alguma técnica ou regras para isso?

     

    Obrigado

    terça-feira, 29 de julho de 2008 23:08

Respostas

  • Olá SirSmart,

     

    De fato sua dúvida está muito voltada ao desenvolvimento e pouco ao SQL Server. Normalmente se modela primeiro as classes para depois modelar o banco e não o contrário. Recomendaria postar essa dúvida em um fórum mais apropriado. Estarei movendo-a.

     

    [ ]s,

     

    Gustavo

     

    quarta-feira, 30 de julho de 2008 01:05
  • SirSmart,

    na minha opinião aqui é o lugar certo apra tratar este tipo de informação

     

    Mas vamos lá..

    Normalmente as tabelas são representadas na aplicação como entidades com as propriedades representando colunas. Aí temos outras questões muito importantes:

     

    1. E quando a tabela faz referência a uma outra, como tratar isso na class que a representa?
    2. Quais métodos devem ser colocados na classe que representa uma tabela?

    Em resposta à questão 1, vamos pensar em duas tabelas, A referenciando B. Representando as tabelas como classes, teríamos duas classes, classA e classB. Como existe um relacionamento de A para B, uma propriedade do Tipo classB teria que ser criada na classe classA.

     

    Atente-se apenas para o seguinte: E se B faz referencia a C, que faz referencia a D, e assim por diante? Carregar isso tudo do banco de dados não teria overhead? Lazy Load pode ser aplicado. http://martinfowler.com/eaaCatalog/lazyLoad.html

     

    Já a segunda questão é um pouco mais "abstrata" Smile

    Quais métodos devem ser colocados na sua classe depende diretamente da sua arquitetura.

    Se ela for distribuída fisicamente, se existe ou não camadas de acesso a dados específicas, etc, etc. Se tiver dúvidas em relação a isso, é só perguntar.

     

    Abraços

    -- André

     

     

    quarta-feira, 30 de julho de 2008 12:12
  • André,

     

    Se você tiver acesso ao Visual Studio 2008, recomendo que você utilize o framework LINQ to SQL. Vai ser o tempo de você abrir o visual studio, criar um projeto e adicionar um .dbml e pronto ... A partir daí é só você arrastar as tabelas de seu banco de dados que as classes serão geredas automaticamente. Inclusive com inteligência para gerar classes de relacionamentos entre tabelas, etc.

     

    Se você não quiser utilizar o LINQ to SQL, há outras opções como o NHibernate. Há uma ferramenta chamada MyGeneration (http://www.mygenerationsoftware.com/) que gerará não só as classes mas também todo o mapeamento xml para você acessar o seu banco de forma integrada.

     

    Esses dois framework acima trabalham com o conceito de lazy loading. 

     

    Se você não quiser utilizar nenhum framework de OR/M (mapeamento objeto-relacional) e nem ferramentas de geração. Bom, há muito tempo atrás, quando eu fazia essas classes na mão, eu costumava adicionar referencias para as classes como forma de representar associaçoes entre elas, ex:

    Um pedido tem muitos ítems de pedido. Você poderia criar a seguinte estrutura:

    Code Snippet

    class Pedido {

        public int Codigo { get; set; }

        public DataTime Data { get; set; }
        public List<ItensPedido> ItensPedido { get; set; }

        ....

    }

     

    class ItemPedido {

        public int Codigo { get; set; }

        public DataTime Data { get; set; }

        ....

    }

     

     

    o chato disso é que vc teria de desenvolver uma inteligencia para implementar o Lazy Loading "na unha", pois nem sempre será agradável trazer todos os relacionamentos que uma entidade possui. Dê uma olhada nos frameworks que citei. Vão te ajudar muito.

     

    Abraços

    André Dias

     

    quarta-feira, 30 de julho de 2008 14:08

Todas as Respostas

  • Olá SirSmart,

     

    De fato sua dúvida está muito voltada ao desenvolvimento e pouco ao SQL Server. Normalmente se modela primeiro as classes para depois modelar o banco e não o contrário. Recomendaria postar essa dúvida em um fórum mais apropriado. Estarei movendo-a.

     

    [ ]s,

     

    Gustavo

     

    quarta-feira, 30 de julho de 2008 01:05
  • SirSmart,

    na minha opinião aqui é o lugar certo apra tratar este tipo de informação

     

    Mas vamos lá..

    Normalmente as tabelas são representadas na aplicação como entidades com as propriedades representando colunas. Aí temos outras questões muito importantes:

     

    1. E quando a tabela faz referência a uma outra, como tratar isso na class que a representa?
    2. Quais métodos devem ser colocados na classe que representa uma tabela?

    Em resposta à questão 1, vamos pensar em duas tabelas, A referenciando B. Representando as tabelas como classes, teríamos duas classes, classA e classB. Como existe um relacionamento de A para B, uma propriedade do Tipo classB teria que ser criada na classe classA.

     

    Atente-se apenas para o seguinte: E se B faz referencia a C, que faz referencia a D, e assim por diante? Carregar isso tudo do banco de dados não teria overhead? Lazy Load pode ser aplicado. http://martinfowler.com/eaaCatalog/lazyLoad.html

     

    Já a segunda questão é um pouco mais "abstrata" Smile

    Quais métodos devem ser colocados na sua classe depende diretamente da sua arquitetura.

    Se ela for distribuída fisicamente, se existe ou não camadas de acesso a dados específicas, etc, etc. Se tiver dúvidas em relação a isso, é só perguntar.

     

    Abraços

    -- André

     

     

    quarta-feira, 30 de julho de 2008 12:12
  • André,

     

    Se você tiver acesso ao Visual Studio 2008, recomendo que você utilize o framework LINQ to SQL. Vai ser o tempo de você abrir o visual studio, criar um projeto e adicionar um .dbml e pronto ... A partir daí é só você arrastar as tabelas de seu banco de dados que as classes serão geredas automaticamente. Inclusive com inteligência para gerar classes de relacionamentos entre tabelas, etc.

     

    Se você não quiser utilizar o LINQ to SQL, há outras opções como o NHibernate. Há uma ferramenta chamada MyGeneration (http://www.mygenerationsoftware.com/) que gerará não só as classes mas também todo o mapeamento xml para você acessar o seu banco de forma integrada.

     

    Esses dois framework acima trabalham com o conceito de lazy loading. 

     

    Se você não quiser utilizar nenhum framework de OR/M (mapeamento objeto-relacional) e nem ferramentas de geração. Bom, há muito tempo atrás, quando eu fazia essas classes na mão, eu costumava adicionar referencias para as classes como forma de representar associaçoes entre elas, ex:

    Um pedido tem muitos ítems de pedido. Você poderia criar a seguinte estrutura:

    Code Snippet

    class Pedido {

        public int Codigo { get; set; }

        public DataTime Data { get; set; }
        public List<ItensPedido> ItensPedido { get; set; }

        ....

    }

     

    class ItemPedido {

        public int Codigo { get; set; }

        public DataTime Data { get; set; }

        ....

    }

     

     

    o chato disso é que vc teria de desenvolver uma inteligencia para implementar o Lazy Loading "na unha", pois nem sempre será agradável trazer todos os relacionamentos que uma entidade possui. Dê uma olhada nos frameworks que citei. Vão te ajudar muito.

     

    Abraços

    André Dias

     

    quarta-feira, 30 de julho de 2008 14:08