[split] MVC Inquiry by mambamaestro

Perancangan software dan pattern

[split] MVC Inquiry by mambamaestro

Postby mambamaestro » 25 May 2010, 13:12

Admin: Posting ini telah dipisahkan dari thread aslinya: ExtPascal: cara mudah membuat RIA dgn Pascal

bee wrote:@v1an: Nah, ini udah ada yg ngaku. Hehehehehe... :D

Sekedar berbagi pengalaman pribadi. Saya beberapa kali merekrut programmer Delphi. Banyak programmer yg melamar, tapi tidak banyak yg lolos seleksi. Bukan krn mereka tidak bisa bikin program. Tapi krn mereka tidak memahami konsep OOP, kemampuan problem solving yg rendah, dan minimnya pengetahuan programming logic. Mereka taunya kalo bikin program pake Delphi itu sekedar drag-n-drop komponen, konek sana-sini, tampilan warna-warni, beres!

wah... tersindir nih jadinya.
bee wrote:Ketika ditanya bagaimana cara membuat komponen, nyaris semuanya gelagepan.


wadah.. ketonjok deh.. wah... jangan-jangan... jangan-jangan...
tapi sekarang udah bisa bikin komponen sendiri. walo sederhana.


terus terang Mr Bee, ana masih tidak kebayang mvc dalam delphi programming. ane sedikit pernah belajar Code Igniter. Sudah ada bayangan mvc dan penerapannya. Tapi menggunakan delphi? prakteknya kok masih belum ada gambaran. Karena keterkaitan yang begitu erat antara komponen, terutama data kontrol, dengan db. Memisahkan lojik program? apa itu bermakna bahwa kita musti memisahkan fungsionalitas dalam unit tersendiri? ana belum kebayang juga, karena keterkaitan yang erat antara fungsi dan event komponen.

Mr Bee bisa memberikan contoh konkrit dalam delphi? atau fpc bolehlah.. yang sederhana aja. satu form untuk input nama misalnya.
mambamaestro
Member
 
Posts: 156
Joined: 06 May 2010, 14:14
Location: Surabaya

RE: ExtPascal: cara mudah membuat RIA dgn Pascal

Postby bee » 25 May 2010, 16:32

UPDATE: Maaf, maaf... contoh yg kemaren itu salah. :( Berikut contoh yg lebih sesuai untuk menjelaskan MVC. Sekali lagi, maaf. :)
__________

@mambamaestro: MVC jangan dibayangin terlalu strict begitu. Apalagi sampe dijlentrehkan secara cetho mana M, V, dan C nya gitu. *ini bhs opo toh?* :D Intinya kalo sudah mampu misahin M-V-C, baik dgn tool atau tidak, pada dasarnya udah pake MVC. Pahami konsepnya, ntar nerapinnya akan lebih luwes dan gak tergantung pada tool/framework eksternal.

Contoh di Delphi? Ng... gini deh...

1. Buat app baru, 1 form, 1 edit, 1 label, 1 button, mirip seperti video Hello World-nya CI. Simpan unit form tsb dgn nama first_view.pas. ;)
Code: Select all
  1. TForm1 = class(TForm)

  2.   Edit1: TEdit;

  3.   Button1: TButton;

  4.   Label1: TLabel;

  5.   procedure Button1Click(Sender: TObject);

  6. end;



2. Buat 2 unit dgn nama first_model.pas dan first_controller.pas.

3. Di Form1, ambil event onClick dari Button1 dgn isi berikut:
Code: Select all
  1. procedure TForm1.Button1Click(Sender: TObject);

  2. begin

  3.   if Edit1.Text = '' then Exit;

  4.  

  5.   DoSearch(Edit1.Text);

  6.   Label1.Caption := SearchResult;

  7.   if Label1.Caption = '' then Label1.Text = 'nothing found';

  8. end;



4. Di unit first_controller.pas, buat procedure DoSearch dgn isi berikut:
Code: Select all
  1. procedure DoSearh(const Keyword: string);

  2. begin

  3.   if Length(Keyword) < 3 then

  4.     SearchResult := 'minimum keyword length is 3 chars'

  5.   else

  6.     QuerySearchResult(Keyword);

  7. end;



5. Di unit first_model.pas, buat procedure QuerySearchResult dgn isi berikut:
Code: Select all
  1. var

  2.   SearchResult: string;

  3.  

  4. procedure QuerySearchResult(Keyword: string);

  5. begin

  6.   SearchResult := '';

  7.  

  8.   SQL.Query := 'select name from employee where name like %'+Keyword+'%';

  9.   SQL.Open;

  10.  

  11.   if SQL.RecordCount > 0 then

  12.   begin

  13.     while not SQL.EOF do

  14.     begin

  15.       SearchResult := SearchResult + SQL.Fields&#91;'name'&#93;.AsString + NewLine;

  16.       SQL.Next;

  17.     end;

  18.   end;

  19.  

  20.   SQL.Close;

  21. end;


*detil koneksi database-nya dibenerin sendiri ya!* :D

Memang contoh di atas sangat sederhana dan seadanya. Saya ngetiknya langsung dari kepala aja. Saya harap contoh di atas cukup jelas memisahkan mana M, V, dan C. Dan juga cukup jelas menunjukkan bahwa Delphi sangat bisa menggunakan konsep MVC.

Dengan pemisahan ini, kalo form Delphi mau diganti form HTML, ya gampang aja. Cukup mengubah event onClick jadi event HTTP POST/GET dgn framework web tertentu. Trus, kalo logika pencarian (langkah 4) mau dibenahi, maka cukup procedure itu aja yg diutek. Trus, kalo koneksi database mau diganti, cukup ngulik unit first_model aja, gak perlu nyentuh yg lain. Kalo format data hasil query mau diubah, pake JSON misalnya, maka cukup fungsi formatting (langkah 5) aja yg diotak-atik. Secara konsep, bukankah ini sudah MVC?

Bagaimana? Cukup paham? :D
bee
Member
 
Posts: 175
Joined: 12 May 2010, 14:15

RE: ExtPascal: cara mudah membuat RIA dgn Pascal

Postby n3o_cybertech » 25 May 2010, 16:47

bee wrote:@mambamaestro: MVC jangan dibayangin terlalu strict begitu. Apalagi sampe dijlentrehkan secara cetho mana M, V, dan C nya gitu. *ini bhs opo toh?* :D Intinya kalo sudah mampu misahin M-V-C, baik dgn tool atau tidak, pada dasarnya udah pake MVC. Pahami konsepnya, ntar nerapinnya akan lebih luwes dan gak tergantung pada tool/framework eksternal.

Contoh di Delphi? Ng... gini deh...

1. Buat app baru, 1 form, 1 edit, 1 label, 1 button, mirip seperti video Hello World-nya CI. Simpan unit form tsb dgn nama first_view.pas. ;) Trus buat 2 unit dgn nama first_model.pas dan first_controller.pas.

2. Di form first_view, ambil event onClick button yg memanggil procedure DoSearch dari unit first_controller dgn sintaks: DoSearch(Edit1.Text, Label1.Caption);

3. Buat procedure di unit first_controller.pas, dgn definisi: procedure DoSearch(Keyword: string; var ResultText: string);

4. Dalam procedure DoSearch, isinya begini:
Code: Select all
  1. if Keyword <> '' then

  2. begin

  3.   ResultText := SearchResult(KeyWord);

  4.   if ResultText = '' then ResultText := '<nothing found>';

  5. end

  6. else

  7.   ResultText := '';



5. Buat function di unit first_model.pas dgn definisi: function SearchResult(Keyword: string): string;

6. Dalam function SearchResult, isinya begini (dalam pseudocode):
Code: Select all
  1. Result := '';

  2. SelectSearchQuery(Keyword);

  3. if SQL.RecordCount > 0 then

  4. begin

  5.   i := 1;

  6.   while not SQL.EOF do

  7.   begin

  8.     Result := Result + SQL.Fields&#91;i&#93;.AsString + NewLine;

  9.     Inc(i);

  10.   end;

  11. end;


*detil koneksi databanya dibenerin sendiri ya!* :D

7. Selesai, jalankan program. *mudah2-an bisa* :D

Memang contoh di atas sangat sederhana dan seadanya. Saya ngetiknya langsung dari kepala aja. Saya harap contoh di atas cukup jelas memisahkan mana M, V, dan C. Dan juga cukup jelas menunjukkan bahwa Delphi sangat bisa menggunakan konsep MVC.

Dengan pemisahan ini, kalo form Delphi mau diganti form HTML, ya gampang aja. Cukup mengubah event onClick jadi event HTTP POST/GET dgn framework web tertentu. Trus, kalo logika pencarian (langkah 4) mau dibenahi, maka cukup procedure itu aja yg diutek. Trus, kalo koneksi database mau diganti, cukup ngulik unit first_model aja, gak perlu nyentuh yg lain. Kalo format data hasil query mau diubah, pake JSON misalnya, maka cukup fungsi formatting (langkah 6) aja yg diotak-atik. Secara konsep, bukankah ini sudah MVC?

Bagaimana? Cukup paham? :D


sering nerapin kyak gini tp g tau klo dah termasuk penerapan MVC :D
Hit Image if this post useful! :wavespin:

Delphi Rock!
User avatar
n3o_cybertech
Senior Member
 
Posts: 273
Joined: 04 May 2010, 18:03

RE: ExtPascal: cara mudah membuat RIA dgn Pascal

Postby bee » 25 May 2010, 17:00

Saya dulu belajar ini waktu masih pake Turbo Pascal, keterusan sampe pake Delphi. Makanya saya dari dulu gak pernah pake komponen dbaware (TDBxxx) soalnya malah gak bisa nerapin metode ini. :D
bee
Member
 
Posts: 175
Joined: 12 May 2010, 14:15

RE: ExtPascal: cara mudah membuat RIA dgn Pascal

Postby herux » 25 May 2010, 17:09

saya waktu kuliah di ajarin turbo pascal. tapi saya lebih mengerti pascal ketika saya pake delphi secara OOP. he.he..
herux
Member
 
Posts: 132
Joined: 06 May 2010, 10:59

RE: ExtPascal: cara mudah membuat RIA dgn Pascal

Postby mas_kofa » 25 May 2010, 17:38

oh..itu yg namanya MVC ya?...aku baca dr awal thread ini masih bingung apa itu MVC....
ternyata begitu....
maklumlah namanya aja bukan anak sekolahan...
User avatar
mas_kofa
Senior Member
 
Posts: 344
Joined: 05 May 2010, 12:03
Location: Jakarta

RE: ExtPascal: cara mudah membuat RIA dgn Pascal

Postby mambamaestro » 26 May 2010, 11:52

bee wrote:Saya dulu belajar ini waktu masih pake Turbo Pascal, keterusan sampe pake Delphi. Makanya saya dari dulu gak pernah pake komponen dbaware (TDBxxx) soalnya malah gak bisa nerapin metode ini. :D

saya dulu juga enggan pake dbaware. tp begitu ketemu kasus format inputan, sptnya mengandalkan dbaware lebih elegan. saya tidak perlu memeriksa event onkeypress tiap kali data yang dimasukkan harus angka bulat, pecahan, string, ato tanggal. saya jarang harus coding di event pada komponen visualnya, kecuali pada kasus khusus yang butuh efek tertentu. saya hanya bermain di level TDataset nya tok dengan mengandalkan dataset memori (dulu pake TClientDataset, sejak sering kelupaan menyertakan midas.dll di paket installer , saya berganti ke TMem... punyaknya kamrad, kemudian sekarang pake TVirtualTable milik MyDac karena kamrad tidak bisa Assign Dataset saat Design time, ada komponen sejenis yang lebih baik nggak ya? yang Free?);

Mungkin mvc Mr Bee bisa saya terapkan dengan parameter2 bertipe TDataset untuk komunikasi antara M-V-C nya. Karena sering sekali data yang diminta view berupa ResultSet (untuk Grid misalnya). Ato Mr Bee punyak solusi lain untuk mengisi grid (apa harus looping gitu? untuk komunikasi view yang punyak grid?)

Trims.
mambamaestro
Member
 
Posts: 156
Joined: 06 May 2010, 14:14
Location: Surabaya

RE: [split] MVC Inquiry by mambamaestro

Postby bee » 26 May 2010, 15:35

@all: Mohon dibaca ulang posting saya terdahulu. Setelah saya baca ulang, baru nyadar kalo itu contohnya kurang tepat untuk MVC, malah lebih tepat untuk MVP. Sudah saya update, apa yg tampil sekarang sudah cukup tepat untuk menjelaskan MVC. Maaf ya temen2... maklum nulisnya cepet2-an aja, saya juga gak makan ilmu sekolahan sih. :D

@mambamaestro: Loh, dgn MVC, urusan format-menformat kan bisa diurus oleh M (format data) atau V (format tampilan). Anda bisa bikin coding se-elegan dbaware kalo anda bisa membungkus format ke dalam class tersendiri. Toh, apa yg dilakukan dbaware pun sebenarnya sama saja. Emangnya TClientDataSet gak pake looping untuk mengisi TDBGrid? ;)

Komponen dbaware tampak elegan krn kodenya disembunyikan dari anda. Kenapa gak anda bikin class sendiri aja yg seperti itu? Bikin class yg bisa mengembalikan hasil query dlm bentuk TDataset, bisa mengembalikan dlm bentuk JSON, dlsb. Bukankah jutru lebih fleksibel dan membuka kesempatan optimasi lebih jauh? ;)
bee
Member
 
Posts: 175
Joined: 12 May 2010, 14:15

RE: [split] MVC Inquiry by mambamaestro

Postby mambamaestro » 13 Jul 2010, 18:43

Dear Mr Bee..
tanya lagi nih..
untuk Exception atau msgbox jika terjadi kesalahan, paling tepat diletakkan dimana ya? di M nya or V nya or C nya? dan apa alasannya?
mambamaestro
Member
 
Posts: 156
Joined: 06 May 2010, 14:14
Location: Surabaya


Who is online

Users browsing this forum: No registered users and 0 guests

cron