Pessoal,
Estou implementando um sistema e estou utilizando (da melhor forma que encontrei) esses três padrões na aplicação e gostaria da opinião de vocês. Já implementei os DAOs implementando as interfaces Repository, que são recuperadas por um Factory que criei. Minha dúvida está na entidade, como temos que deixar os nossas entidades mais inteligentes e com mais responsabilidades, adotei essa abordagem. Vejam o método encontrarPorId() e listarTudo() por exemplo, o que acham?:
/**
*
* @author Anderson
*/
@Entity
public class PerfilDeUsuario implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(nullable=false)
private String descricao;
@Transient
private IPerfilDeUsuarioRepositorio repositorio;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public IPerfilDeUsuarioRepositorio getRepositorio() {
if(this.repositorio == null){
this.repositorio = FabricaDeRepositorios.getPerfilDeUsuarioRepositorio();
}
return this.repositorio;
}
public void salvar() throws Exception{
this.getRepositorio().persistir(this);
}
public void excluir() throws Exception{
this.getRepositorio().excluir(this);
}
public static PerfilDeUsuario encontrarPorId(Long id) throws Exception{
return FabricaDeRepositorios.getPerfilDeUsuarioRepositorio().encontrarPorId(id);
}
public static List<PerfilDeUsuario> listarTudo(){
return FabricaDeRepositorios.getPerfilDeUsuarioRepositorio().listarTudo();
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final PerfilDeUsuario other = (PerfilDeUsuario) obj;
if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 3;
hash = 97 * hash + (this.id != null ? this.id.hashCode() : 0);
return hash;
}
}