Wednesday, February 02, 2011

Rewrite NerdDinner + DCI + SisoDB

Salam -1Malaysia

Antara cara untuk cepat memahami dan belajar sesuatu teknik dalam programming ialah dengan rewrite existing open source application kepada teknik baru yang hendak dikuasai.Cara sebegini agak berkesan kerana bahagian UI tidak perlu dibina, boleh menggunkan UI yang dah ada, apa yang penting ialah mengubah code dibahagian belakang (backend).

Untuk itu aku akan tunjukkan cara macam maner aku rewrite + refactor existing nerddiner code kepada teknik DCI.InsyAllah aku akan bahagikan artikel nie kepada beberapa bahagian.

Untuk mereka yang tak tahu apa itu NerdDinner, boleh baca kat sini NerdDinner Codeplex.

First sekali aku perlu kenal pasti which part/code yang aku ingin rewrite.Jadi dalam nerddinner application bahagian yang aku kenal pasti pertama sekali ialah bahagian register sebagai user. NerdDinner menggunakan Membership provider which is pada aku provider yang okay bagi normal developer, tetapi tidak bagi experiance developer.

Okay first sekali tengok dalam orginal code di controller



Pada line no 8, controller akan call Membership service untuk create User. Aku rewrite code di contoller dan mengantikan Membership service kepada DCI context.



Code diatas ialah code di controller apabila ditukar untuk connect ke DCI context. Perhatikan pada line 13 iaitu RegisterAccountContext. RegisterAccountContext bertanggungjawab untuk run process mendaftarkan user.

Project Solution
Sebelum start dengan lebih detail, disini aku tunjukkan beberapa perubahan yang dilakukan tetapi tidak terlalu ekstrim, pada project solution aku tambah another 2 folder dalam project yang sama (Aku tak buat dlm project yang lain untuk tujuan demo ini). Dua folder yang baru ditambah ialah Contexts dan juga Domains folder didalam folder Model seperti ini :


Domains
Orginal nerddiner menggunakan Entity Framework Codegen, tetapi disini aku akan guna normal POCO plus SisoDB. Untuk mereka yang tidak tahu apa itu SisoDb boleh baca disini SisoDb.

Untuk first domain aku akan buat ialah UserAccount. Aku akan tunjukkan sesimple yang boleh untuk rewrite aplikasi ini.



Interface IRolePlayer hanyalah marker interface, manakala IUserAccount ialah role interface, nanti akan diterangkan secara detail.

Context

Context ialah object yang akan implement use case. Kebiasaannya nama context similar kepada nama use cases. Jadi disini aku akan create satu context yang dipanggil RegisterAccountContext.



Okay pada line 9, aku declare role interface, dimana role interface ini hanyalah available digunakan hanya dlm context register account.

Pada line 30, role akan diinject dengan RoleMethod (RegisterAccountRole) class

this.IUserAccount.PlayRole()
.Register(userName, passWord, email);


Business interaction akan berlaku didalam class RegisterAccountRole, lihat line 42.

Okay rasa setakat ini untuk bahagian 1.

Hantar email untuk sample complete code

1 comments:

Anonymous said...

Hi,

Nice to see that you are interested in SisoDb. My translator software wasn't the best for this article so I didn't get everything. Interested in hearing your opinions of how it worked. You can contact me at SisoDb.com

Regards
Daniel