Thursday, June 28, 2007

Object Modeling, Tahap Advance ke ? Part 1

Ok tajuk kat atas tu saya ambil dari seseorang yang saya anggap Guru, saya banyak belajar dari beliau dan hingga sekarang masih lagi berguru :)

So artikel ini adalah berdasarkan Object Modeling yang telah disediakan oleh beliau di link ini TulisanInsan.

Saya minat nak try side by side TDD and Design Domain, so saya akan demo basic dari UML dan start buat simple test dan tambah lagi dan lagi dan lagi.. :)

Pada saya Pelanggan ada 2 konteks sama ada perlu dimasukkan dlm object atau ianya external object yang akan communicate melalui PelayanKaunter tapi tak begitu penting dlm sistem, mungkin juga pelanggan ini akan penting dalam sistem dan bukan menjadi external object jika maklumat pelanggan itu diperlukan atau ada apa-apa information dari pelanggan yang akan memainkan peranan dalam aplikasi tersebut. Jika kita banyangkan aplikasi ini adalah seperti KFC atau Mc Donalds, pelanggan tak berapa penting.. itu pendapat saya. Saya juga akan cuba menggunakan sebanyak mungkin Fluent Interface semasa buat TDD.

First saya akan bahagikan Test Suite saya kepada beberapa suite, unutk permulaan yang penting sya akan buat CreateTest suite. Test ini akan menumpukan test creation object.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Domain.KaunterMakanan;
using NUnit.Framework;

namespace KaunterMakanan.Test
{
[TestFixture]
public class CreateTest
{
[Test]
public void CreatePelayanKaunter()
{
PelayanKaunter pk = new PelayanKaunter();
Assert.IsNotNull(pk);
}

[Test]
public void CreatePesananMI()
{
PesananMI pmi = new PesananMI();
Assert.IsNotNull(pmi);
}

[Test]
public void PelayanCounterCanCreatePesanan()
{
PelayanKaunter pk = new PelayanKaunter();
pk.CreatePesanan(new PesananMI());

Assert.AreEqual(1, pk.PesananLists.Count);
}


}
}


Code diatas hanyalah test suite dimana belum ada domain lagi dibuat.So bila run code diatas memang akan menjadi fail. So kita perlu ada object PelayanKaunter dan PesananMI

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Domain.KaunterMakanan
{
public class PelayanKaunter
{
}
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Domain.KaunterMakanan
{
public class PesananMI
{
}
}


So next kita run semula code kita dan 2 dari 3 Test Suite akan hijau manakala Test Suite PelayanCounterCanCreatePesanan still merah, ini adalah kerana kita masih lagi tidak mempunyai method CreatePesanan didalam object PelayanKaunter. Next kita akan refactor code PelayanKaunter dengan tambah method CreatePesanan() dan berdasarkan usecase En Hamdi PelayanKaunter boleh create many PesananMI.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Domain.KaunterMakanan
{
public class PelayanKaunter
{


protected List<PesananMI> pesananLists = new List<PesananMI>();

public List<PesananMI> PesananLists
{
set { pesananLists = value; }
get { return pesananLists; }
}

public void CreatePesanan(PesananMI pesananMI)
{
pesananLists.Add(pesananMI);

}
}
}


bersambung

2 comments:

rushdan said...

Power la Guru Yahya...
Guru yahya guru yahya...

Anonymous said...

yg ni source code bg c++ ker?