Caros Javaneses,
Qual das modelagens é a correta?
Estou tendo dificuldades em entender padrões de Projetos :shock:
Não sei se penso na perfomance do sistema ou na ótima modelagem do sistema.
Caros Javaneses,
Qual das modelagens é a correta?
Estou tendo dificuldades em entender padrões de Projetos :shock:
Não sei se penso na perfomance do sistema ou na ótima modelagem do sistema.
Tentarei ser mais específico, existe a modelagem de um sistema OO com banco OO(exemplo:Caché) e a outra com banco Relacional(PostgreSQL) que é o meu caso.
Ai veio a dúvida usar ou não usar Herança ?
package com.frutacor.producao;
/**
*/
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import com.frutacor.enums.EnuTipoUnidadePeso;
import com.frutacor.seguranca.BtpUsuario;
/**
*
*
*/
@Entity
@Inheritance
@Table(name = ““FRU_FRUTA””)
@DiscriminatorColumn(name = ““FRU_NOME_FRUTA””, discriminatorType = DiscriminatorType.STRING)
@SequenceGenerator(name = ““seqFruta””, sequenceName = ““seqFruta””, allocationSize = 1)
public abstract class Fruta implements Cloneable,Serializable{
/**
*
*/
private static final long serialVersionUID = -4460758749463077394L;
/**
* É UTILIZADO ID DEVIDO AO MAPEAMENTO DO BANCO DE DADOS RELACIONAL
*/
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "\"seqFruta\"")
@Column(name = "\"FRU_SEQ_FRUTA\"", nullable = false)
protected Long fruSeqFruta;
/**
* NOME DA FRUTA
*/
@Column(name = "\"FRU_NOME_FRUTA\"", nullable = false, length = 60)
protected String fruNomeFruta;
/**
* TIPO DA UNIDADE DE PESO
*/
@Basic(optional = false)
@Enumerated(EnumType.ORDINAL)
@Column(name = "\"FRU_UNIDADE_PESO_FRUTA\"", nullable = false, length = 2, columnDefinition = "NUMBER", precision = 0)
protected EnuTipoUnidadePeso fruTipoUnidadePesoFruta;
public Fruta(Long fruSeqFruta, String fruNomeFruta,
EnuTipoUnidadePeso fruTipoUnidadePesoFruta,
Date fruDatCadastroFruta,
BtpClassificacaoCientifica btpClassificacaoCientifica,
BtpUsuario btpUsuario) {
super();
this.fruSeqFruta = fruSeqFruta;
this.fruNomeFruta = fruNomeFruta;
this.fruTipoUnidadePesoFruta = fruTipoUnidadePesoFruta;
}
public Long getFruSeqFruta() {
return fruSeqFruta;
}
public void setFruSeqFruta(Long fruSeqFruta) {
this.fruSeqFruta = fruSeqFruta;
}
public String getFruNomeFruta() {
return fruNomeFruta;
}
public void setFruNomeFruta(String fruNomeFruta) {
this.fruNomeFruta = fruNomeFruta;
}
public EnuTipoUnidadePeso getUnidadePesoProducao() {
return fruTipoUnidadePesoFruta;
}
public void setUnidadePesoProducao(EnuTipoUnidadePeso enuTipoUnidadePeso) {
this.fruTipoUnidadePesoFruta = enuTipoUnidadePeso;
}
}
package com.frutacor.producao;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import com.frutacor.enums.EnuTipoUnidadePeso;
import com.frutacor.seguranca.BtpUsuario;
@Entity
@Table(name = ““BAN_BANANA””)
@DiscriminatorValue(“BANANA”)
@SequenceGenerator(name = “seqBanana”, sequenceName = “seqBanana”, allocationSize = 1)
public class Banana extends Fruta implements Serializable,IBanana{
private static final long serialVersionUID = 3195685501727132993L;
@Enumerated(EnumType.ORDINAL)
@Column(name = "\"BAN_UNIDADE_PROUCAO_BANANA\"", nullable = false, length = 2, columnDefinition = "NUMBER", precision = 0)
protected EnuTipoUnidadePeso banUnidadeProducaoBanana;
@Column(name = "\"BAN_DAT_CADASTRO_BANANA\"", columnDefinition = "DATE")
@Temporal(TemporalType.DATE)
protected Date banDataCadastroBanana;
@Column(name = "\"BAN_PESO_MEDIO_BANANA\"", precision = 10, scale = 2)
protected Double banPesoMedioBanana;
@Column(name = "\"BAN_CICLO_BANANA\"", nullable = false, length = 2, columnDefinition = "NUMBER", precision = 0)
protected Long banCicloBanana;
@Column(name = "\"BAN_CICLO_PROUCAO_BANANA\"", nullable = false, length = 2, columnDefinition = "NUMBER", precision = 0)
protected Long banCicloProducaoBanana;
public Banana(Long fruSeqFruta, String fruNomeFruta,
EnuTipoUnidadePeso fruTipoUnidadePesoFruta,
Date fruDatCadastroFruta,
BtpClassificacaoCientifica btpClassificacaoCientifica,
BtpUsuario btpUsuario,
EnuTipoUnidadePeso banUnidadeProducaoBanana,
Date banDataCadastroBanana, Double banPesoMedioBanana,
Long banCicloBanana, Long banCicloProducaoBanana) {
super(fruSeqFruta, fruNomeFruta, fruTipoUnidadePesoFruta,
fruDatCadastroFruta, btpClassificacaoCientifica, btpUsuario);
this.banUnidadeProducaoBanana = banUnidadeProducaoBanana;
this.banDataCadastroBanana = banDataCadastroBanana;
this.banPesoMedioBanana = banPesoMedioBanana;
this.banCicloBanana = banCicloBanana;
this.banCicloProducaoBanana = banCicloProducaoBanana;
}
public Date getDataCadastro() {
return banDataCadastroBanana;
}
public void setDataCadastro(Date dataCadastro) {
this.banDataCadastroBanana = dataCadastro;
}
@Override
public Long getCiclo() {
return banCicloBanana;
}
@Override
public void setCiclo(Long ciclo) {
this.banCicloBanana = ciclo;
}
@Override
public Long getCicloProducao() {
return banCicloProducaoBanana;
}
@Override
public void setCicloProducao(Long cicloProducao) {
this.banCicloProducaoBanana = cicloProducao;
}
@Override
public Double getPesoMedio() {
return banPesoMedioBanana;
}
@Override
public void setPesoMedio(Double pesoMedio) {
this.banPesoMedioBanana = pesoMedio;
}
}
Pelo que você postou,não consegui captar nenhuma forma de estruturar as suas classes a não ser por herança.
Por falar em estruturação,você inverteu a seta que indica que a classe Banana herda de fruta( e para as demais).
Mas se houvesse alguma forma de você estruturar esse modelo colocando composição, seria o mais indicado.
Vamos esperar para ver se alguém posta alguma sugestão que encaixe no seu modelo
Abraços.