Cocoa & iPhone Development : MVC Design Pattern

มกราคม 24, 2009 at 4:28 pm 4 ของความคิดเห็น

มาว่ากันด้วยเรื่องแรกที่เราต้องรู้จากที่กล่าวไว้ข้างต้นนะครับ(ถ้าไม่นับว่าต้องมีเครื่องแมค อันนั้นมีตังซื้อก็พอแล้ว อิอิ) เรื่องเกี่ยวกับ MVC (Model-View-Controller) Design Pattern นั่นเอง

อันที่จริง เกี่ยวกับ MVC นี้ หาอ่านได้ไม่ยากในอินเตอร์เนต ทั้งภาษาอังกฤษและภาษาไทย ซึ่งหลายๆที่ก็อธิบาย MVC ในเทอมต่างๆภาษาและเฟรมเวิร์คกันไป เช่น MVC บน PHPCake(PHP)  หรือ MVC บน Ruby on Rails(Ruby)  ในที่นี้ ผมเองก็จะขออธิบายในเทอมของ Cocoa ละกันนะครับ

เริ่มเลยแล้วกัน…

MVC Design Pattern คือ Design Pattern ในระดับ Architecture แบบนึง ที่ได้รับความนิยมในการ Design Application ขนาดใหญ่ในปัจจุบัน ตัว MVC ในชื่อของมัน ย่อมาจากคำว่า Model-View-Controller ซึ่งก็ตรงตัวกับลักษณะของมันนั่นเอง ซึ่งก็คือ “การแบ่งองค์ประกอบของ Application ออกเป็นสามส่วนแยกออกจากกัน” ซึ่งแต่ละส่วนจะทำงานเชื่อนโยงกันในลักษณะดังภาพ

Cocoa MVC - ภาพจาก Apple.com

Cocoa MVC - ภาพจาก Apple.com

แนวคิดของ Design Pattern จากภาพจะเห็นว่า แอพพลิเคชั่นแบ่งออกเป็น 3 ส่วน คือ View และ Model เชื่อมต่อกันผ่าน Controller แล้วแต่ละส่วนมันเป็นยังไงไงบ้างหล่ะ ?

Model คือ ส่วนของข้อมูล ตัวอย่างเช่น Database หรือ Datasource ของตารางใน Application เป็นต้น Model อาจรวมถึง State ของ Application ได้ด้วยเช่นกัน เช่น Preference Setting ของโปรแกรมก็ได้ ไม่ได้จะหมายถึง Information อย่างเดียวเท่านั้น ซึ่งตัว Model เองก็จะต้องมี Model Logic อยู่ด้วย ซึ่งก็หมายถึง เงื่อนไขการเข้าถึงหรือการเก็บข้อมูล จะเก็บอย่างไร ชนิดไหน อย่างไร ฯลฯ  (ในส่วนของ Model Logic จะเห็นชัดเมื่อเรารู้จัก Property List ใน Objective-C 2.0 ที่จะพูดถึงในภายหลังนะครับ ตอนนี้ Push Stack ไว้ก่อนนะครับ) หน้าที่ของ Model ไม่มีอะไรไปมากกว่า “การเก็บข้อมูล” และ “การส่งข้อมูล” เท่านี้จริงๆครับ ไม่มีมากไปกว่านี้ อย่าสับสนกับ Model Logic นะครับ

View คือ ส่วนของการแสดงผล เช่นกันครับ หน้าที่ของ View ไม่มีไปมากไปกว่า “การแสดงผล” และ “การรอรับคำสั่ง” View ที่เห็นๆกันก็คือ GUIs นั่นแหละครับ ภายใน View ก็เหมือนกับ Model ครับ ต้องมี View Logic เช่นกัน View Logic ก็คือข้อกำหนดของการแสดงผลครับ หน้าต่างกว้าง-ยาว แค่ไหน ปุ่มเป็นสไตล์ไหน ตัวอักษรสีอะไร ฯลฯ นีแหละครับ View Logic น่าจะพอเห็นภาพนะครับ

Controller ส่วนนี้เป็นส่วนที่เชื่อมการทำงานระหว่าง Model กับ View จะพูดให้ง่ายกว่านั้นก็คือ มันคือ “User Logic หรือ Action Logic” ครับ เพราะมันเป็นส่วนควบคุมการทำงานของ User ที่ทำต่อ Application นั่นเอง ว่า User ทำอะไรได้บ้าง แล้ว Application ต้องทำอะไรบ้างเมื่อได้รับ Action นั่นมาแล้ว นั่นคือหน้าที่ของ Controller ครับ

ใน Cocoa Framework ยังมี Object อีกประเภทนึง เรียกว่า “Hybrid Model” ซึ่งหมายถึง Model ที่รวม Model กับ Controller เข้าไว้ด้วยกัน เพราะบางครั้งการแยกกันแบบ MVC อาจไม่ได้เหมาะสมกับ Application ทุกแบบ(รวมกันอาจจะดีกว่า ง่ายกว่า เร็วกว่า) ตัวอย่างของ Hybrid Model ใน Cocoa ก็เช่น Array Controller เป็นต้น และใน iPhone App Dev ก็เช่น Image Picker เป็นต้น(นอกจากนี้ยังมีอีกเยอะ แต่ยังไม่ได้ลอง) ซึ่งก็จะได้รู้จักกันภายหลังนะครับ (Push Stack ไว้อีกอันแล้วกันนะครับ)

ในส่วนของ MVC ก็ขอจบไว้เท่านี้นะครับ สามารถศึกษาเรื่องของ MVC ได้จากที่อื่นด้วยนะครับ บางที่อาจจะเขียนดีกว่าผมซะอีก เห็นว่ายังไงก็แนะนำกันได้นะครับ แล้วเจอกันใน Entry ถัดไปนะครับ (กะว่าจะอธิบายสั้นๆนะ ทำไมมันยาวไปซะได้ละเนี่ย เหอๆ)


Let’s talk about first thing, which you must know before start to iPhone application development, It’s MVC Design Pattern

In fact, You can find an article about MVC very easy from internet. Thai and English both. Each articles will explain about MVC in term of any language and framework such as MVC on PHPCake(PHP) or MVC on Ruby on Rails(Rails). So, I’ll explaining MVC in term of Cocoa Framework .

Let’s start

MVC Design Pattern is one Design Pattern in “Architecture Level” which popular in “Large scale application design” in this time. MVC is stand for Model-View-Controller which explain self structure from name is “Separate an element of application to 3 parts”. Each part is work together like in illustrate.

Cocoa MVC - ภาพจาก Apple.com

Cocoa MVC - ภาพจาก Apple.com

From the illustrate, you see Application separate in 3 parts is “View” and “Model” is connected by controller. How its work?

Model is data storage part. Such as Database or Data source in table in application. Model part is can be include state of application like preference setting not only “Information”.Model must have a “Model logic” inside. Model logic is a “Condition for storage”, how to storage?, which type and etc (we’ll talk about this again in “Property list in Objective-C 2.0 entry). A load of Model is not more than “storage” and “retrieve” a data. Not more than that.

View is a show result part. Same as “Model” a load of View is not more than “Show result” and “Wait for action”. A well-known View is GUIs. Inside View must have “View Logic” like Model too. Model Logic is an attribute for display such as Dimension (height-width), button style, font color and etc.

Controller is a connection part with “Model” and “View”. Say an easier is a “User Logic” or “Action Logic”. Because its controlled an action of user to do on application. What user can do ?. When got an action, What should application do ? , This is Controller load.

In Cocoa Framework still has one object type called “Hybrid Model”. Its a Model which have controller integrated. Because maybe a separate in 3 part like MVC is not good solution for all. For example for “Hybrid model” on Cocoa such as “Array Controller” and in iPhone App Dev is such as “Image Picker”. We’ll say again in later.

I finished entry about MVC only this. You can read MVC article from other place (somewhere can explain better than me). See you again in next Entry.

Entry filed under: Cocoa Programming, Computer, iPhone Programming, News & Article. Tags: , , , , , , , .

ฺBook Review : วิชาสุดท้ายที่มหาวิทยาลัยไม่ได้สอน MV Review : จะถามเอาอะไร – เต้น Mic Idol

4 ความเห็น Add your own

  • 1. เป้  |  มกราคม 25, 2009 ที่ 5:56 pm

    ตามมาเก็บข้อมูล

    คราวนี้ไม่เขียนภาษา eng เหรอครับ

    จริงๆผมตามอ่าน eng นะเนี่ยย อิอิ แซวเล่นเฉยๆครับ

    ตอบกลับ
  • 2. Jerapong Nampetch  |  มกราคม 25, 2009 ที่ 6:02 pm

    เดี๋ยวจะเขียนครับ แต่ตอนนี้ยังไม่อยากแปล แบบว่ายังเหนื่อยๆอยู่ครับ เหอะๆ

    ตอบกลับ
  • 3. Angos  |  ตุลาคม 29, 2009 ที่ 5:22 pm

    ปกติเขียน Model ใน iPhone แบบ Singleton หรือเปล่าครับ
    ถ้าไม่ใช้ Singleton จะทำยังไงให้ Model สามารถ share ระหว่าง controller กับ view หลายๆ ชุดได้โดยไม่ Reinstantiate ใหม่?

    ตอบกลับ
    • 4. Jerapong Nampetch  |  ตุลาคม 31, 2009 ที่ 3:14 am

      ใช้ singleton ก็ได้ครับ class ของ application ที่ชื่อว่า $_APPNAMEAppDelegate จะสามารถเชื่อมกันกับ class อื่นแบบ singleton ได้ โดยผ่าน method [UIApplication sharedApplication].delegate ครับ

      เช่น สมมุติว่าต้องการจะใช้ window ของ application จากคลาสอื่น เราก็ทำได้โดยใช้คำสั่งดังนี้

      $APPNAMEAppdelegate appDelegate = ($_APPNAMEAppDelegate *)[UIApplication sharedApplication].delegate.window;

      $APPNAMEAppdelegate = ชื่อโปรเจคต่อด้วย AppDelegate

      วิธีนี้จะใช้ได้เฉพาะ instance ของ application นะครับ

      หรือไม่อีกวิธีหนึ่งก็คือ share กันผ่าน interface builder ครับ เงื่อนไขคืออยู่ใน NIB เดียวกัน และ object ประกาศด้วย interface builder ครับ แบบนั้นจะง่ายสุดครับ

      ตอบกลับ

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google photo

You are commenting using your Google account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


del.icio.us For iPhone dev

Post Calendar

มกราคม 2009
พฤ อา
« ธ.ค.   ก.พ. »
 1234
567891011
12131415161718
19202122232425
262728293031  

%d bloggers like this: