Monday, April 06, 2009

Kenapa Active Record ku pandang sepi

Ntah kenapa bila aku tengok Active Record nyer pattern aku tak begitu tertarik walaupun ianya bagus, mudah,senang dan simple. Element-element sebegitulah yang diperlukan KISS cuma ntah perasaan ini tidak dapat nak ambil Active Record sebagai pemain utama dalam DataAccess layer. Siapa ada hujah menyakinkan aku untuk aku memberi tempat Active Record dalam DataAccess Layer?...

7 comments:

MK said...

Kalau tak tertarik dengan Active Record, tertarik dengan apa?

ryzam said...

Repository pattern...

MK said...

Ok, tapi kena ingat, itu enterprise pattern dan berkait dengan DDD. Adakah semua application development nak pakai cara mcm tu?

Untuk sesuatu project ada criteria dia, adakah perlu minimal design atau maximum design? Bergantung pada environment, team-member dan resource yang sedia ada. Maybe KISS patterns are the way to go.

En Ryzam skrg terlibat dengan banyak enterprise application dan DDD sebab tu byk guna enterprise patterns dan pandang sepi pattern yang kurang ngam ngan DDD. Tapi jikalau buat development untuk startup yang serba kekurangan, DDD dan enterprise pattern lain (yg memakan masa untuk buat) adalah premature investment dan barangkali startup dah lingkup.

Bagi development yang begitu terikat dengan time constraint dan resource, AR paling ideal sebab implementation dia dah terlalu banyak skrg ni, boleh terus guna.

Dan kebanyakan software project evolve. Tak semestinya project tu perlu Repo pattern pada permulaan walaupun ia akan memerlukannya pada masa akan datang.

Everything is situational and should be taken with a grain of salt. :D

ryzam said...

Alhamdulillah , ada juga hujah yang menceriakan minda. Memang betul juga pendapat Bro Khairul. Saya tidak menidakan keperluan AR pada small application even though untuk yang enterprise pun boleh guna, cuma back kepada SRP pattern tak dikira bersaiz besar atau kecil pemilihan pattern mencorakkan keupayaan domain tersebut. Apabila terlalu couple antara entity dengan infrastructure kerja (CRUD), untuk buat testing cukup susah

Mengikut project criteria sama ada besar atau kecil kita perlu design cukup hanya untuk keperluan waktu itu. Sama ada minimal design atau maximum design keberangkalian akan ada changes tetap ada.

Mungkin ada salah faham tentang repository pattern. Pattern ini sesuai sahaja sama ada enterprise atau pun tidak, jika startup / interim project apa yang team saya practicekan ialah dengan menggunakan GenericRepository pattern dan keupayaan dan kemudahan setanding dengan AR.

Just nak tanya Khairul dulu team Mr Hamdi?

MK said...

Tak, jumpa Mr Hamdi pun tak pernah lagi.

Ikhwan Hayat said...

Aku, alhamduliLlah, pernah ada experience guna dua2 ActiveRecord dan DataManager/Repository, aku prefer DM/Repo sbb beberapa benda:

1) Testability - Lebih mudah bila nak test domain tapi tak nak sibuk2 nak setup database etc. Lebih mudah nak buat mocking.

2) Lebih loosely coupled dan lebih mudah bila nak gunakan Dependency Injection.

3) Lebih cohesive, adhering more to Single Responsibility Principle. Perkara berkaitan persistence bukan responsibility utama domain objects.

4) Lebih fleksible dlm domain design. Kadang2 bila guna AR,

Dalam dunia Java dan .NET, rasanya lebih banyak framework DM/Repo berbanding ActiveRecord, dan lebih matang. Contohnya NHibernate/Hibernate. Ada juga framework ActiveRecord seperti dari Castle Project, yg sit on top of NHibernate. Tapi bila jenis2 yg sitting on top ni, kadang2 kita susah nak harvest keupayaan sebenar framework yg asal.

Tak semestinya bila guna Repository lebih susah dari ActiveRecord. Sama je. Tapi bergantung jugak pada framework yg digunakan.

Just a humble opinion.

Ikhwan Hayat said...

4) Lebih fleksible dlm domain design. Kadang2 bila guna AR, design kita terikat dgn paradigma "database". Tanpa coupling antara domain objects dan persistence, kita boleh men-design dgn lebih "bebas".

-- edit: tertinggal :P