Bagian 7. Jeruk dan Apel

$5 + Rp 10=Rp 9.010 jika $1=Rp 9000

Rp 10 * 2 = Rp 20

Efek perkalian terhadap object?

Amount harus private?

Pembulatan uang?

Equals()

GetHashCode()

Jenis object?

Null?

$10*2=$20

Duplikasi dolar dan rupiah

Equality yang lebih umum

Method Times() yang lebih umum

Bedakan dollar dan rupiah

Didalam test sebelumnya kita berhasil membedakan antara Rp10 dengan Rp5 dan menyamakan antara $5 dengan $5, tetapi apakah sama antara Rp10 dengan $10. Tentu saja tidak. Dollar dengan Rupiah jelas berbeda. Tetapi apkah class kita bisa membedakan? Mari kita coba bikin test.

[Test]
public void Equality(){
	...
	Assert.IsFalse(new Dollar(10).Equals(new Rupiah(10)),"10 dollar sama dengan 10 rupiah");
}

Hasil dari test ini adalah salah. Dengan kata lain Rp 10 sama dengan $ 10. Ini terjadi karena ketika kita membandingkan object kita hanya peduli bahwa nilainya sama, 10. Oleh karena itu agar terkita berhasil, kita juga harus membedakan jenis uang.

public class Money{
		public override bool Equals(object obj){
			Money money=(Money)obj;
			return this.m_amount==money.m_amount
				&& this.GetType().Equals(money.GetType());
		}
	}

Dengan memeriksa tipe dari class, dollar dan rupiah bisa kita bedakan. Test saya jalankan dan sukses. Namun, karena tipe class bukan bagian dari domain yang kita kerjakan, maka ini bisa kita kategorikan sebagai bad smell yang nanti harus kita refactor. Seharusnya yang kita bandingkan adalah currency bukan tipe class, berhubung penambahan itu akan memakan waktu banyak, kita lakukan nanti saja. Jadi kita catat dulu di dalam todo-list kita.

$5 + Rp 10=Rp 9.010 jika $1=Rp 9000

Rp 10 * 2 = Rp 20

Efek perkalian terhadap object?

Amount harus private?

Pembulatan uang?

Equals()

GetHashCode()

Jenis object?

Null?

$10*2=$20

Duplikasi dolar dan rupiah

Equality yang lebih umum

Method Times() yang lebih umum

Bedakan dollar dan rupiah

Currency?

Dalam bagian ini kita,

  • Telah mengambil sesuatu yang mengganggu pikiran kita ke dalam test.
  • Test terhadap hal yang mengganggu tersebut telah berhasil, walaupun tidak benar dari sisi design.
  • Kita tidak menambakan implementasi baru kecuali memang betul-betul memaksa dan ada tujuannya.
Iklan

There are no comments on this post.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: