Home > Domain Driven Design > Entities (Part 3)

Entities (Part 3)

Saya ingatkan lagi bahwa identity tidak bisa berubah. Jadi kita akan membuatnya seperti ini.

public class Mahasiswa {
     private string m_nim;
     public int NIM 
     {
        get { return m_nim; }
        private { m_nim = value; }
     }
}

Loh jadi gimana ngeset nimnya ?? mmm. tergantung infrastructurnya sih. Klo ntar repository nya diimplemtasikan dengna NHibernate ya ntar dia yg kasih sesuai dengan yg kita tentukan. Atau make reflection. dll. Kita blum membicarakan tentang repository dulu.

Identity merupakan hal yg sangat penting. Object kadang harus bisa ditentukan sama dengan object lain meskipun memiliki attribute yg berbeda. Object juga harus bisa dibedakan berdasarkan identity meskipun attributenya sama.

Meskipun attributenya berubah ubah. Tapi kelangsungan nya harus tetap dijaga. Via identity.

Tetapi dalam software system entity bukan selamanya orang atau sesuatu yg ada di dunia nyata. Bisa juga merupakan sesuatu yg sifatnya conceptual. Bisa aja kota, tiket, transaksi bank.

Kita lihat contoh transaksi bank. 2 deposit dengan jumlah deposito yg sama pada account g sama pda hari yg sama tetap saja merupakan transaksi yg berbeda. Jadi transaksi itu memiliki identity dan merupakan entity. Nilai uang yg didepositokan pada kedua transaksi merupakan object money. Nilai dari money tidak memiliki identity. Jadi itu bukan entity.

Skarang kita tau bahwa kedua object itu sama hanya jika identitynya sama. Maka kita harus mendefinisikan operasi atau method yang dijamin akan memberikan hasil yg uniqu untuk setiap identity, bisa juga dengan menambahkan attribute atau simbol yg dijamin uniq. Jadi sistem harus mendefinisikan sesuatu yg sama itu seperti apa. Entity yg sama itu seperti apa.

Kita bisa mengimplementasikanny seperti ini.

public interface IEntity<T> {

  /**
   * Entities dibandingkan berdasarkan identity bukan berdasarkan attribute
   *
   * @param other 
   * @return true akan mereturn true jika indentity sama, meskipun attribute berbeda
   */
  boolean sameIdentityAs(T other);
}

Skarang kita akan membuat mahasiswa sebagai entity. yang kita pilih sebagai identitynya adalah NIM.

public class Mahasiswa : IEntity<Mahasiswa>
{
	private string m_nim;
	private string m_name;
	private string m_address;
	// attribute lainnya

	// constructor , property, logic
	// diletakkan di sini
	
	public boolean sameIdentityAs(final Mahasiswa other) {
		return other != null && other.m_nim.equals(m_nim);
	}

	public boolean equals(final Object object) {
		if (!(object instanceof Mahasiswa)) {
		  return false;
		}

		final Mahasiswa other = (Mahasiswa) object;
			return sameIdentityAs(other);
	}
	
	public int hashCode() {
		return m_nim.hashCode();
	}
}

Nah yg perlu dicermati adalah. Equality object dioverride. Jika equals dioverride makan hashCode juga harus dioverride. Syntax apa ini ya ?? Java + C#. Hahahaha. Campur.

Nah perbandingan identity ada di sameIdentityAs.

Business Key nya adalah m_nim alias NIM. Apa itu bisnis key ?? Bisnis key itu adalah property. Atau kombinasi dari property yg unique untuk setiap instance.

Business Key equality dilakukan dengan cara bagaimana ? equals method hanya membandingkan bisnis key dari kedua entity sama atau tidak. jadi ga perlu semua propertynya dicek satu2 sama atau tidak.

  1. No comments yet.
  1. No trackbacks yet.

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: