The Importance of Sharing


Data Access Object yang biasanya disebut DAO, merupakan pattern yang biasa digunakan oleh para developer ketika membuat aplikasi berbasis database. DAO biasanya digunakan oleh para developer untuk menerapkan “separation of concern” atau pemisahan kode program berdasarkan fungsinya, dan DAO itu sendiri berfungsi untuk memanipulasi data yang terdapat didalam database. Jadi semua proses CRUD database ada didalam class – class DAO tersebut.

DAO juga berfungsi sebagai mekanisme untuk menyembunyikan bagaimana cara kita memanipulasi database, sehingga aplikasi kita menjadi loosely coupled. Mengapa harus demikian ? Misalnya kita ingin mengganti mekanisme untuk mengakses database yang awalnya menggunakan Statement menjadi PreparedStatement, kita cukup mengganti pada DAO layernya saja. Dengan adanya DAO, aplikasi kita hanya berkomunikasi dengan DAO layer saja, tidak langsung mengakses database, seperti pada umumnya.

Domain Logic ——-> DAO ———> Database

DAO Layer biasanya terdiri atas sebuah interface yang mendefinisikan method – method untuk memanipulasi database beserta dengan kelas implementasinya.

public interface PersonDao {
    public void save(Person person);
    public void update(Person person);
    public void delete(Person person);
    public List<Person> getAll();
}

Ada beberapa jenis connection scope yaitu method scope, instance scope dan thread scope, yang biasa saya gunakan adalah intance scope, sehingga impelementasi dari interface diatas adalah.

public class PersonDaoImpl{
    private Connection connection;

    public PersonDaoImpl(Connection connectiontion){
        this.connection=connection;
    }
    public void save(Person person){
        //Kode untuk memanipulasi data;
    }
    public void update(Person person){
        //Kode untuk memanipulasi data;
    }
    public void delete(Person person){
        //Kode untuk memanipulasi data;
    }
    public List<Person> getAll(){
        //Kode untuk memanipulasi data;
        return list;
    }
}

Kemudian kita perlu sebuah kelas yang berfungsi untuk memanajemen DAO, karena biasanya kita akan memiliki DAO sebanyak berapa kita memiliki entitas. Jadi kalau kita memiliki 2 entitas, misalnya Customer dan Supplier, maka kita akan memiliki 2 DAO. Maka dari itu kita perlu sebuah kelas untuk memanajemen DAO tersebut.


public class DaoManager{
    private static Connection connection;
    private static PersonDao dao;

    private DaoManager(){

    }
    public static Connection getConnection(){
        if (connection==null){
           //buat objek koneksi
        }
        return connection;
    }
    public static PersonDao getDao(){
        if(dao==null){
            dao = new PersonDaoImpl(getConnection());
        }
        return dao;
    }
}

Nantinya ketika kita akan membuat objek dao, misalnya PersonDao, maka cara memanggilnya seperti ini.

PersonDao dao = DaoManager.getDao();
// untuk mengambil data
List<Person> persons = dao.getAll();
// atau bisa juga
List<Person> persons1 = DaoManager.getDao().getAll();

Untuk lebih jelasnya, anda bisa melihat contohnya pada artikel selanjutnya.

REFERENSI

  1. http://en.wikipedia.org/wiki/Loose_coupling
  2. http://tutorials.jenkov.com/java-persistence/dao-design-pattern.html
  3. Java Desktop, Ifnu Bima.

Comments on: "Mengenal Data Access Object (DAO) Pattern" (4)

  1. sebaiknya cara ini dihindari

    List persons1 = DaoManager.getDao().getAll();

    Karena sudah melanggar Law of Demeter (Least Knowledge Principle)

    • Terima kasih mas agung atas ilmunya..🙂 Berarti yang benar adalah cara yang pertama, yaitu
      PersonDao dao = DaoManager.getDao();
      List persons = dao.getAll();
      Sumber :
      1. books.google.com: Java Tm Design: Objects, UML and Process

  2. lagi belajar java ya ampun mas pusing banget… mas belajar java dimana sih

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: