Fórum Duvida sobre A utilização de Struct e Enum #2340

29/01/2009

0

Olá Finalmente estou estreando essa consultoria...   A minha duvida é quando usar Struct e quando usar Enum. Tenho um projeto que estou refazendo do inicio e estou projetando os meu objetos (POCOS) do zero e estou com duvida de qdo usar um ou outro.... Segue abaixo o meu Diagrama de classes, onde vc pode ver que estou tentando utilizar um struct para definir que tipo de produto esta sendo cadastrado, se e um serviço matéria prima ou material de consumo.   Essa classificação pode sofrer alterações ao decorrer do tempo e acredito que uma struct daria mas flexibilidade para o projeto. Estou certo????   Para deixar mais claro de como e a minha arquitetura vou descreve la resumidamente.... eu trabalho em um arquitetura em camadas e utilizo o nhibernete na minha camada de persistência.
Daniel Porfirio

Daniel Porfirio

Responder

Posts

29/01/2009

Luiz Maia

Ola Daniel, seja bem vindo!   Bom, simplificando, o uso de Enum "engessa" os valores sua aplicação, você deve usá-lo quando quer criar um domínio para seus valores, como o uso de constantes.   Os Structs tem comportamento parecido com as classes, realmente são muito mais flexiveis. E ao contrário das classes não precisam de ser instanciadas.   Ambos são tipos de valores (Value_Types), isto significa que os dados que eles contêm são armazenados numa pilha (stack) na memória.   Já as Classes  são Tipos de Referencia (Reference-Types) que são armazenadas na memória heap, por isto tem performace pior, tem necessitam de boxing e unboxing.   OS Structs são implicitamente derivados da classe chamada System.ValueType. Segue um  exemplo de Struct:   MinhaEstrutura {    public int x, y, z; }   Criar a estrutura:   MinhaEstrutura me = new MinhaEstrutura();     Uma strutura não pode ter a instancia do campo como uma classe:   Class A {    int i = 8; // correto }   Struct {    int i = 8; // errado }     A enumeração consiste um set (lista) de  constantes de um domínio. Seus elementos tem os valores inteiros começando pelo ZERO e incrementando um sucessivamente. Exemplo:   enum cores{vermelho, azul, verde};   chamada: int Cor = (int) cores.vermelho;   Qualquer dúvida estamos a disposição.   Att Luiz Maia  
Responder

Gostei + 0

29/01/2009

Daniel Porfirio

Legal e bem oq eu estava imaginando msm valeu pela força Agora o problema e outro como trabalhar com struct no nhibernate nunca fiz isso, sera que vs poderia me ajudar   E aproveitando gostaria de saber se a minha estrutura esta correta, eu implementei algumas  sobrecargas para facilitar a utilização da mesma e seguindo o exemplo do artigo do Giovanni Bassi da edição 58 e praticamente uma copia hehehe   public struct ProdutoTipo { public string Descricao { get; private set; } public int ID { get; private set; } private static ProdutoTipo _ProdutoVenda = new ProdutoTipo() { ID = 1, Descricao = "Produto para Venda" }; public ProdutoTipo ProdutoVenda { get { return _ProdutoVenda; } } private static ProdutoTipo _MateriaPrima = new ProdutoTipo() { ID = 2, Descricao = "Materia Prima" }; public ProdutoTipo MateriaPrima { get { return _MateriaPrima; } }   private static ProdutoTipo _ProdutoConsumo = new ProdutoTipo() { ID = 3, Descricao = "Produto para Consumo" }; public ProdutoTipo ProdutoConsumo { get { return _ProdutoConsumo; } } private static ProdutoTipo _Servico = new ProdutoTipo() { ID = 4, Descricao = "Servi‡o" }; public ProdutoTipo Servico { get { return _Servico; } } public override bool Equals(object obj) { if (!(obj is ProdutoTipo)) return false; return ((ProdutoTipo)obj).Descricao == this.Descricao; } public override bool operator ==(ProdutoTipo objA, ProdutoTipo objB) { return objA.Equals(objB); } public override bool operator !=(ProdutoTipo objA, ProdutoTipo objB) { return !objA.Equals(objB); } public override int GetHashCode() { return this.ID; } }
Responder

Gostei + 0

29/01/2009

Luiz Maia

Daniel,   Quando você usa struct como componente para seus mapeamentos, o nHibernate não consegue popular as propriedades dos métodos GET do Struct, ou seja, não dá para usar os dois juntos.   Se sua aplicação ainda estiver no início, te aconselho a trocar o nHibernate pelo Linq e usar os Lists<>.   Aguardo seu retorno.   Att Luiz Maia
Responder

Gostei + 0

29/01/2009

Daniel Porfirio

Bom nesse caso terei que optar por engessar um pouco a aplicação por causa do prazo estar muito curto Muito abrigado pela Ajuda
Responder

Gostei + 0

29/01/2009

Luiz Maia

Blz Daniel, precisando é só nos contactar.   Sucesso em sua aplicação. Abraços   Att Luiz Maia
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar