Array
(
)

Chave Estrangeira em OOP

Tone Costa.
|
MVP
Pontos: 65
    03 mar 2013

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

Joel Rodrigues
   - 03 mar 2013

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

Valter Furtado
   - 04 mar 2013

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

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

Joel Rodrigues
   - 04 mar 2013

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

Code Easy
   - 04 mar 2013

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)

#Código

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.

Code Easy
   - 04 mar 2013

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)

#Código

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.