Chave Estrangeira em OOP
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
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
Tone Costa.
Curtidas 0
Respostas
Joel Rodrigues
03/03/2013
Nesse caso você pode ter, na classe Cliente, um objeto do tipo Municipio. Isso inclusive é implementado por ORMs.
GOSTEI 0
Valter Furtado
03/03/2013
isso que o Joel disse é o que faria tambem...
colocaria a classe municipio... e depois popularia só os campos que interessam no relacionamento.
colocaria a classe municipio... e depois popularia só os campos que interessam no relacionamento.
GOSTEI 0
Joel Rodrigues
03/03/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.
Novamente, os ORMs fazem isso.
Boa sorte.
GOSTEI 0
Code Easy
03/03/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)
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.
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.
GOSTEI 0
Code Easy
03/03/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)
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.
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.
GOSTEI 0