Como usar pattern Factory para criar um DataBaseFactory

Estou querendo fazer uma aplicação MVC que funcione perfeitamente em qualquer banco (Ex: SQL, Oracle, MySQL, etc) então estava lenco o livro do GoF sobre Design Patterns e vi que tal situação seria bom usar o Abstract Factory…porem tenho algumas dúvidas:

1 - Existe algo chamado Simple Factory? Qual a diferença disso para Abstracted Factory e ainda para Method Factory?

2 - Essa modelagem esta correta?

interface class IDataBase {
    abstract createConnection ();
    abstract closeConnection();
    abstract updateDB();
    abstract selectDB();
}

public class SqlServerDataBase extends IDataBase {
    //implemntação concreta dos metodo no SQL Server
    createConnection()         
    exitConnection()             
    updateDB(String query)                
    selectDB(String query)  
}

public class OracleDataBase extends IDataBase {
    //implemntação concreta do metodo no Oracle
    createConnection()     
    exitConnection()         
    updateDB(String query) 
    selectDB(String query)  
}

public class DataBaseFactory {
   private final int SQL_SERVER = 0;
   private final int ORACLE = 1;

    public static IDataBase createDataBase (int sgdb) {
       if (int == SQL_SERVER){
            return new SqlServerDataBase();
       }
       if (int == ORACLE){
            return new OracleDataBase();
       }
    }    
}

Nesse modelo ai como eu faria para acoplar ao meu MVC…seria no Model?

    IDatabase objDB = DataBadeFactory.createDataBase(0);   //caso seja um banco SQL Server

E sobre os metodos a baixo, como fazer para que esses metods sirvam tanto para inserir um objeto Aluno, Disciplia, Curso, tendo em vista que vou usar uma JTable para manipular esses dados?

    updateDB(String query)                //implemntação concreta do metodo no SQL Server
    selectDB(String query)                 //implemntação concreta do metodo no SQL Server

Grato…!

Vc ta lidando com a parte mais complexa de orientacao a objeto na minha opiniao q eh a mardita persistencia.

O meu conselho e nao tentar reinventar a roda, de uma olhada no pattern DAO, mapeamento objeto relacional, frameworks de persistencia e coisas do genero.

Nao mao eh mto trabalhoso e nao compensa o esforco.

[quote=caio.formiga]Estou querendo fazer uma aplicação MVC que funcione perfeitamente em qualquer banco (Ex: SQL, Oracle, MySQL, etc)
[/quote]

Veja, para fazer uma aplicação que funcione bem em Qualquer banco, sugiro a utilização de um ORM (Object Relational Mapping), pois não é so a questão de uso de um Objeto ou outro, mas sim, as diferenças entre as implementações de SQL de cada banco de dados, tipos de dados, etc…

Alguns vão ter triggers, outros não, etc.

O Hibernate abstrai isso para vocês, de maneira simples e eficiente.

No entanto, podes ainda, implementar de forma a deixar prático o uso, ou do Hibernate, ou JDBC, através deste pattern que você descreveu. A abstração que você apresenta, o proprio JDBC já faz :slight_smile:

Eu usaria:
Hibernate + Spring (para injeção de dependencia, e controle de transação).

Dê uma pesquisada no fórum e na web, se você se interessar pelo assunto. Já perguntei aqui sobre isso, e fiz também buscas sobre DAO e Factory, e achei esse combinação acima a melhor opção.

[]s

[quote=YvGa]Vc ta lidando com a parte mais complexa de orientacao a objeto na minha opiniao q eh a mardita persistencia.

O meu conselho e nao tentar reinventar a roda, de uma olhada no pattern DAO, mapeamento objeto relacional, frameworks de persistencia e coisas do genero.

Nao mao eh mto trabalhoso e nao compensa o esforco.[/quote]

Persistência é um princípio de OO? :shock:

Galera valeu pelas dicas… porem eu queria aprender a fazer, talvez até re-inventar a roda, pois quero entender como isso funciona para depois partir para uso de framework e afins…na minha visão seria como aprender a usar JSP e depois usar o framework de Struts…

Sobre DAO e ORM eu irei sim estudar sobre o assunto e posto aqui em breve e sobre as coisa que falei o que vcs podem me fala?

[quote=caio.formiga]Estou querendo fazer uma aplicação MVC que funcione perfeitamente em qualquer banco (Ex: SQL, Oracle, MySQL, etc) então estava lenco o livro do GoF sobre Design Patterns e vi que tal situação seria bom usar o Abstract Factory…porem tenho algumas dúvidas:

1 - Existe algo chamado Simple Factory? Qual a diferença disso para Abstracted Factory e ainda para Method Factory?
[/quote]

São padrões diferentes de fabricação de objetos.
Method Factory - um método é a fabrica
Factory - o metodo que fabrica está num objeto especial.
Abstract Factory - o objecto de Factory muda

A resposnta a isso é simples: implemente pelos menos para 3 bancos. Funciona ?
Então está correto.

Sergio

[quote] São padrões diferentes de fabricação de objetos.
Method Factory - um método é a fabrica
Factory - o metodo que fabrica está num objeto especial.
Abstract Factory - o objecto de Factory muda [/quote]

Não entendi muito bem não cara :frowning: Sim e no modelo que eu fiz foi só conceitual ainda, não comecei a desenvolver nada não…é apenas a fase de estudo :slight_smile: Porem se eu fosse fazer daquele jeito estaria certo? Seria elegante, tem outra forma de fazer que seja muito diferente? Esta no caminho certo? Estas coisas :slight_smile:

Valeu ai!

O Simple Factory é também conhecido como Static Factory, e é considerado mais um idioma do que um padrão. Consiste em criar um método estático numa classe para criar objetos. O factory method e o abstract factory estão descritos no livro do GoF. A implementação mais tradicional do abstract factory utiliza uma coleção de factory methods.

Quer uma sugestão para entender bem os padrões? Leia o livro “Head First Design Patterns” ou a tradução “Use a Cabeça! Padrões de Projetos” (não sei como está a tradução)

abraços

[quote=fabiocsi]

Persistência é um princípio de OO? :shock:[/quote]

eu disse isso???

Acho q nao. Se foi essa a impressao q passou, me expressei mal. Alias, lendo e relendo nao consegui fazer essa leitura.

[quote=caio.formiga]Sergio

[quote] São padrões diferentes de fabricação de objetos.
Method Factory - um método é a fabrica
Factory - o metodo que fabrica está num objeto especial.
Abstract Factory - o objecto de Factory muda [/quote]

Não entendi muito bem não cara :frowning: Sim e no modelo que eu fiz foi só conceitual ainda, não comecei a desenvolver nada não…é apenas a fase de estudo :slight_smile:
![/quote]

A ique está a questão. “Fase de estudo” não existe. Implemente o codigo e veja se funciona. Quer conceptualmente como em runtime. funcionar conceptualmente é exactamente isso que vc quer saber. Quando mais coisas fizer com mesnos codigo melhor. Isso vc só vai saber codificando. Por isso que lhe disse para implementar para 3 bancos diferentes. E já agora use a estrutura em 3 programas diferentes. Ai sim vc vai ver se é flexivel, elegante, etc…