Archive

Archive for the ‘Design Pattern’ Category

Programming to Interface

July 18, 2010 2 comments

Baru saja selesai skimming buku Interface Oriented Design. Buku ini menuntas habis mengenai cara kita membuat sistem dengan interface.

Introduction

Di awal buku ini ada contoh mengenai Pizza Ordering. Skenarionya adalah kira2 sebagai berikut.

Kejadiannya ini karena malam2 lapar trus pengen pesan pizza favourite.
Nelepon deh..

Pizza guy : Yapz
Aku : Aku mw pesan pizza jumbo
Pizza : Toppings?
Aku : Pepperoni dan Mushrooms
PIzza : Alamat?
Aku : 1 Oak street
Pizza : 30 menit lagi akan diantar.

Nah.. kita coba bangun interface untuk PizzaOrdering tersebut. Hampir di setiap pemesanan pizza akan mendapati model percakapan seperti itu. Pemesanan pizza memiliki interface yg sama tetapi hanya implementasinya saja yg berbeda. Misalkan kita menelpon pizza yg lain maka yg kita hadapi kemungkinan besar adalah percakapan di atas.


public interface PizzaOrdering 
{
      void SetSize(Size size);
      void SetToppings(Toppings toppings);
      void SetAddress(Address address);
      DateTime GetTimeDelivered();
}

Nah.. sekarang kita udh punya interfacenya.. Trus bagaimana kita mendapatkan implementasi dari interface tersebut ? Kita tentu saja butuh Finder. Kita cari di buku telepon atau buku informasi mengenai toko pizza. Dari situ kita akan dapat memilih mana toko pizza yg akan kita hubungi. And then dial the number… Cara kita meng-order pizza tersebut sama tetapi perlakuan toko terhadap proses tersebut kemungkinan besar berbeda. Interfacenya sama tetapi implementasinya berbeda.
Read more…

Advertisements

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…

DDD Notes

April 3, 2009 Leave a comment

Diambil dan disarikan dari casey charlton

Bounded Context

Context merupakan sisi yg berhubungan dengan bisnis sedangkan bounded context merupakan hal yg berhubungan dengan teknikal implementation
Dengan membagi aplikasi kita menjadi banyak context kita mendukung modularity, separation of concern dan loose coupling. Karena satu model tidaklah cukup untuk menggambarkan suatu permasalahan. Karena masing2 memiliki sudut pandang yg berbeda2
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…

Event Collaboration

April 3, 2009 Leave a comment

Dengan menggunakan Event Collaboration. Maka kita akan memperoleh kemudahan dalam menambahkan komponen baru. Meskipun diperlukan sedikit perubahan sudut pandang atau pola berpikir dari request response style. Komunikasi pada event collaboration dilakukan via event. Event muncul jika suatu object memiliki perubahan state. Perubahan state dari object tersebut dicapture dalam domain event dan akan dipublish oleh object yg bersangkutan. Misalnya object mobil memiliki event BensinHabis atau BanPecah dll.
Read more…

Domain Event

April 3, 2009 Leave a comment

Saya menemukan artikel bagus mengenai domain event dan hal-hal yg berhubungan dengan pemodelan event pada oo.

PoEAA
Pengenalan Mengenai Event
Domain Event

Dengan memperkenalkan event pada system kita memperoleh berbagai macam keuntungan. Salah satu yg paling mecolok adalah loose couple.
Read more…