Archive

Posts Tagged ‘OOAD’

Penggunaan dan Best Practice pada DDD

April 3, 2009 Leave a comment

DDD cocok untuk digunakan pada project yg memiliki lifetime yg lama dan memiliki kompleksitas yg tinggi. Meskipun demikian banyak juga project kecil yg dapat menerapkan sebagian dari DDD sebagai Pattern language. Pada DDD sebagai Pattern Language hubungan dengan domain expert dan Ubiquitos language akan dihilangkan atau dikurangi. Karena kedua bagian tersebut merupakan hal yg paling sulit dilakukan dan time consuming process.

Salah satu best practice pada orang yg masih baru di DDD adalah selalulah menggunakan bahasa. Bahasa yg dimaksud tentu saja Ubiquitous Language. Bahasa merupakan kunci yg paling penting dalam membuat system yg baik. Bahasa membuat kita tahu bahwa system kita buruk atau tidak.
Read more…

Getter and Setter adalah Domain Anti-Pattern

April 3, 2009 5 comments

Object haruslah kaya akan behavior. Object tidak memiliki bentuk. Jika kita mengekspose state dari object tersebut dengan getter dan setter, maka object yg menggunakannya akan bergantung kepada shape tersebut. Terjadilah coupling terhadap object tersebut. Internal state dari object hanya boleh diubah berdasarkan behavior object tersebut saja.

Jika kita mengeset suatu field pada sebuah object saya yakin sebenarnya ada behavior yg menuntuk kita melakukannya. Pasti ada behavior yg melatarbelakanginya tetapi kita mungkin salah menempatkannya. Mungkin kita menempatkannya di Service Layer atau bisa saja pada object yg berinteraksi langsung dengan object tersebut.
Read more…

Event Sourcing

April 3, 2009 Leave a comment

Event Sourcing
Pada pattern ini semua event yg terjadi itu dicapture dalam object dan kemudian disimpan sebagai log. Log ini berfungsi untuk proses auditing atau dapat digunakan untuk mengembalikan state dari aplikasi ke kondisi semula. Agar dapat membangun semuanya dari kondisi nol dari log maka sequecen nya harus dipertahankan.
Kegunaan log yg lain adalah untuk memperbaiki kesalahan yg dilakukan pada masa lalu. Klo di dunia accounting dinamakan dengan reversal adjustment atau retroactive change.

Jadi pada suatu aplikasi kita memiliki dua data untuk di kelola. Salah satu nya adalah application state. Data yg satu ini pasti ada di setiap aplikasi apapun. Application state ini menggambarkan keadaan aplikasi yg terkini atau current state. Yang kedua adalah event log. Event log menyimpan perubahan2 state yg terjadi pada aplikasi tersebut.
Read more…

Patterns for Accounting (Part 1)

February 6, 2009 Leave a comment

Sebagian besar software yg ada di dunia ini berhubungan dengan duit atau uang. Tul ga ? Manusia emang terobsesi ya dari dulu sama yg namanya uang. Bahkan untuk itung2 uang aja ada profesi khusus. Padahal yg diitung bukan uang dia. Hahahaha. Accounting nama profesinya. Nama jurusnnya akuntansi. Mata pelajaran yg tidak aku suka di SMU. Huff

Fundamental konsepnya dari accounting itu double-entry bookeeping. dicetuskan oleh Luca Pacioli orang italia kyknya. Intinya kita merecord berbagai jenis tempat uang atau pot uang. Pot ?? macam bunga aja. Iya tempat penyimpanan maksudnya. Dan perpindahan uang tersebut juga ditrack. Jadi uang itu ga bisa hilang gitu aja. Meskipun hanya 200 rupiah. Wuih sadis banget. detail sekali
Read more…

Tell don’t Ask

February 5, 2009 5 comments

Object-oriented code lebih mudah dimengerti dan dimantain jka ditulis dengan menggunakan style “Tell, Don’t Ask”. Maksudnya ?? Object haruslah membuat keputusan hanya dengan menggunakan informasi yg dimiliki bukan berdasarkan informasi yg dimiliki oleh object lain. Tell itu command. Ask itu query.

Contohnya.

public class MyObject
{
     private OtherObject m_otherObj;
     .....
     public void MoveSomething()
     {
           boolean state = m_otherObj.IsOK; // ask / query
           if (state)
              m_otherObject.DoBadAction(); // command / tell
           else
              m_otherObject.DoGoodAction();
     }
}

akan lebih baik jika kita mengubahnya seperti ini :
Read more…

The Law of Demeter (LoD)

February 5, 2009 1 comment

Law of demeter merupakan style design di oop. Intinya adalah “principle of least knowledge”. Apaan tuh. Mengetahui sesedikit mungkin tentang object yg digunakan di dalam method. Contohnya

public class Project 
{
      public void doSomething() 
     {
          Employee e = new Employee();
          .....
     }
}

jadi kelas project harus mengetahui sesedikit mungkin mengenai kelas employee. Mengetahui apa ? Strukturnya tentu saja. Dengan cara apa emang kita tau struktur employee. Dengan cara kita ngakses property dari employee dan subpartnya. Subpart ini apa maksudnya ? Subpart dari employee. Maksudnya kita ngakses lagi property dari property si employee. Contohnya ….

public class Project 
{
      public void doSomething() 
     {
          Employee e = new Employee();
          String cityCode = e.Address.City.Code;
     }
}

Gitu maksudnya. Jadi subpartnya itu City dan diakses lagi Code. Itu ga boleh. Pantang. Haram hukumnya. Najis. Jijik. dll
Read more…

Categories: OO Programming Tags: , ,

Command-query separation (CQS)

February 4, 2009 Leave a comment

Merupakan principle yg dicetuskan oleh Bertrand mayer. Bahwa setiap method memiliki hanya satu fungsi saja. Kalau tidak sebagai command yg melakukan aksi (biasanya ini untuk ngubah data atau state dari si object). Maka sebagai query untuk mengembalikan data ke si pemanggil. Tapi bukan keduanya. Hanya satu saja. Jadi jika kita ask ke object maka kita tidak boleh mengubah statenya. Method hanya boleh mengembalikan nilai jika tidak ada side effectnya. Read more…

Categories: Design Pattern Tags: ,