Pattern Dao in Java

– Indice Tutorial –

Il pattern DAO è usato per separare la logica di business dalla logica di acceso ai dati. Infatti, i componenti della logica di business non dovrebbero mai accedere direttamente al database: questo comporterebbe scarsa manutenibilità. Solo gli oggetti previsti dal pattern Dao possono accedervi.  Inoltre, se dovessimo modificare il tipo di memoria persistente utilizzata, o anche passare da Oracle a MySql per esempio, non sarà necessario stravolgere il codice della nostra applicazione, ma basterà modificare i DAO utilizzati.

I concetti principali sono:

  • una classe (model) per ogni tabella
  • una interfaccia (detta Dao) per ogni tabella contenente tutti i metodi Crud relativi a quella tabella.
  • una implementazione per ogni interfaccia Dao

Chiunque voglia poter accedere al DataBase dovrà usare la relativa interfaccia Dao.

Se dovessimo cambiare persistenza, sarà suffficiente creare una nuova implementazione delle interfacce Dao, senza stravolgere tutto.

Esempio in JAVA:

public class Books {
	private int isbn;
    private String bookName;

    public Books() {
    }

    public Books(int isbn, String bookName) {
        this.isbn = isbn;
        this.bookName = bookName;
    }

	public int getIsbn() {
		return isbn;
	}

	public void setIsbn(int isbn) {
		this.isbn = isbn;
	}

	public String getBookName() {
		return bookName;
	}

	public void setBookName(String bookName) {
		this.bookName = bookName;
	}

    
}

Books rappresenta il model.

public interface BookDao {

    List<Books> getAllBooks();
    Books getBookByIsbn(int isbn);
    void saveBook(Books book);
    void deleteBook(Books book);
}

Chiunque voglia accedere alla tabella books dovrà usare una implementazione di questa interfaccia.

public class BookDaoImpl implements BookDao{
	//list is working as a database
    private List<Books> books;

    public BookDaoImpl() {
        books = new ArrayList<>();
        books.add(new Books(1, "Java"));
        books.add(new Books(2, "Python"));
        books.add(new Books(3, "Android"));
    }

    @Override
    public List<Books> getAllBooks() {
        return books;
    }

    @Override
    public Books getBookByIsbn(int isbn) {
        return books.get(isbn);
    }

    @Override
    public void saveBook(Books book) {
        books.add(book);
    }

    @Override
    public void deleteBook(Books book) {
        books.remove(book);
    }
}

In questo caso, abbiamo usato un arraylist per simulare una base di dati, ma il concetto non cambia; tutti i metodi relativi a books andranno in questa classe.

	public static void main(String[] args) {

        BookDao bookDao = new BookDaoImpl();

        for (Books book : bookDao.getAllBooks()) {
            System.out.println("Book ISBN : " + book.getIsbn());
        }

        //update student
        Books book = bookDao.getAllBooks().get(1);
        book.setBookName("Algorithms");
        bookDao.saveBook(book);
    }

Chiunque voglia accedere al Db, sia esso il main o il business layer, dovrà fare le operazioni su indicate.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *