Chave Estrangeira em OOP

03/03/2013

2

Boa tarde

Sei que é uma duvida boba, mas estou precisando da opiniao de pessoas mais experientes.

O cenario é o seguinte

Tenho duas tabelas no banco de dados

Tabela: Cliente
Id
Nome
Endereco
Bairro
Cep
Municipio_id

Tabela: Municipio
id
CodigoIBGE
NomeMunicipio
Estado

No modelo relacional não tenho problema, uma vez que o id do municipio é chave estrangeira na minha tabela cliente.

Agora tenho que fazer as classes de dominio.

Aqui que esta a duvida.

Isso esta correto ?

public class Municipio
{
public string Id {get; set;}
public int CodigoIBGE {get; set;}
public string NomeMunicipio {get; set;}
public string Estado {get; set;}
}

public class Cliente o
{
public string Id {get; set;}
public string Nome {get; set;}
public string Endereco {get; set;}
public string Bairro {get; set;}
public string Cep {get; set;}
public string MunicipioId {get; set;}
}

Qual seria a melhor forma de mapear essas tabelas?
Nao vou usar nenhuma ferramenta ORM. Será SQL ANSI.

Grato

Responder

Posts

03/03/2013

Joel Rodrigues

Nesse caso você pode ter, na classe Cliente, um objeto do tipo Municipio. Isso inclusive é implementado por ORMs.
Responder

04/03/2013

Valter Furtado

isso que o Joel disse é o que faria tambem...

colocaria a classe municipio... e depois popularia só os campos que interessam no relacionamento.
Responder

04/03/2013

Joel Rodrigues

Uma ideia é: na hora de instanciar o Cliente, já preencher o objeto Municipio que ele contém.
Novamente, os ORMs fazem isso.
Boa sorte.
Responder

04/03/2013

Code Easy

Tone, só uma observação que eu sempre faço na minha empresa, modelo de banco de dados é uma coisa e de classes é outra. Como o Joel falou, também prefiro fazer usando ORM (NHibernate ou Entity Framework), mas já que você não pretende usar, vamos ao exemplo prático seguindo a sua necessidade: (desculpe se não compilar, estou usando o iPad)

public class Cliente
{
    private Municipio municipio;   

    Public Municipio Municipio
    {
        get 
        {
            if (municipio == null)
            {
                municipio = ObterMunicipioPeloIdDoCliente(this.IdCliente)
            }
            return municipio;
        }
        set
        {
              municipio = value;
        }
}


As classes tem que estar sempre interligadas, uma dica é você criar um diagrama de classes pelo visual Studio na pasta das suas classes de domínio e sempre mantê-lo atualizado. Irá te auxiliar na manutenção das classes e no entendimento do negócio.
Responder

04/03/2013

Code Easy

Tone, só uma observação que eu sempre faço na minha empresa, modelo de banco de dados é uma coisa e de classes é outra. Como o Joel falou, também prefiro fazer usando ORM (NHibernate ou Entity Framework), mas já que você não pretende usar, vamos ao exemplo prático seguindo a sua necessidade: (desculpe se não compilar, estou usando o iPad)

public class Cliente
{
    private Municipio municipio;   

    Public Municipio Municipio
    {
        get 
        {
            if (municipio == null)
            {
                municipio = ObterMunicipioPeloIdDoCliente(this.IdCliente)
            }
            return municipio;
        }
        set
        {
              municipio = value;
        }
}


As classes tem que estar sempre interligadas, uma dica é você criar um diagrama de classes pelo visual Studio na pasta das suas classes de domínio e sempre mantê-lo atualizado. Irá te auxiliar na manutenção das classes e no entendimento do negócio.
Responder