Nine MVP's Blog

04/06/2010

ASP.NET MVC Series I : Foundation of ASP.NET MVC

Filed under: ASP.NET — Nine MVP @ 8:24 pm
  • ASP.NET MVC Series I : Foundation of ASP.NET MVC
  • ASP.NET MVC Series II : ASP.NET MVC Programming Next…..

Developer Skills

  • Intermediate Level

Tools and Languages

แนะนำบทความเรื่อง ASP.NET MVC ซึ่งผู้เขียนตั้งใจเขียนอ้างอิงกับ ASP.NET MVC v2.0 ตัวปัจจุบัน โดยเริ่มต้นกันแต่แรกไปจนจบเนื้อหาที่พอจะทยอยเขียนออกมาได้  ในบทนี้จะแนะนำให้รู้จักกับ MVC Pattern และใช้งาน ASP.NET MVC 2.0 ในเบื้องต้น   และรวมไปถึงการเปรียบเทียบระหว่าง ASP.NET Web Form และ ASP.NET MVC เราควรจะเลือกใช้ตัวไหนในการพัฒนา

Introduction

จะว่าไปแล้วเรากำลังศึกษาวิธีการเขียนโปรแกรมแบบโบราณอยู่ครับ    เพราะ MVC นั้นเป็นทั้ง Arichitectural Pattern และ Design Pattern ที่มีมานานมากสมัยปี คศ. 1979   โดยนาย Trygve Reenskaug พัฒนาตัวนี้ให้ smalltalks บน PARC   ซึ่งเท่าที่ผมศึกษาดูมาคร่าว ๆ ในแพลทฟอร์มอื่น  แทบทุกภาษาจะมี MVC Framework ไว้ให้ใช้    ฝั่ง Java คงไม่ต้องกล่าวถึงเพราะเป็นเจ้าแห่งการ implement pattern เกือบทั้งหมดที่มีอยู่ในโลกบวกกับที่คิดค้นใหม่และเติบโตขึ้น    ส่วนฝั่ง .NET เองก็พัฒนาต่อยอดมาเป็น MVP, MVVM, etc.  แม้กระทั้งภาษาอย่าง PHP ที่เป็น scriptlet ก็ยังมี MVC ให้ใช้กัน โอ้โฮ.. แบบนี้ MVC มันดียังไง แล้วทำไมทุก Platform ต้องมีเจ้านี่ไว้ในระบบ    ในบทความเรื่องนี้เราจะมาคุยกันครับ

จากที่ผ่านมาหลาย ๆ ท่านคงคุ้นเคยกันดีใน Visual Studio  เมื่อกด double click ที่ control ต่าง ๆ แล้วจะสร้าง Event Click ให้ใน Code behind     สิ่งนี้นำพาโปรแกรมเมอร์ทั้งหลายไปทำงานภายใต้ Event ของคอนโทรล หลังจากได้ Click Event แล้ว  งานอะไรคิดอะไรได้ก็โค้ด ๆ เขียนใส่ลงไปทั้งหมด จะประกาศตัวแปร, จะติดต่อ Database, จะเรียก web service, จะวนลูปกี่ร้อยรอบ ทุกอย่างประดังลงไปใน Event Click   ดีหน่อยบางคนใส่ try catch ให้ด้วย    ซึ่งสิ่งที่ทำไปนี้โค้ดทั้งหมดจะไปฝังอยู่รวมกัน      ทำให้ชุดของโค้ดนั้นปนกันระหว่าง Presentation Logic,  Business Logic และ Data Access Logic     หากจะถามว่าผิดหรือไม่ก็คงตอบได้เต็มปากว่าไม่ผิดอะไรครับ เพราะตอบโจทย์ทางลูกค้าคือ งานสำเร็จและคุณรอดตัวได้งานในวันนี้    แต่ทั้งหมดนี้ไม่สามารถแยกแต่ละส่วนงานออกจากกันได้  แก้เพียงงานบางส่วน เช่น เปลี่ยนกฎการตรวจสอบ input data, แก้บิสเนสลอจิกให้ตรวจสอบเพิ่มเติม เป็นต้น ก็อาจจะกระทบทั้งโมดูล กลายเป็นต้อง retest ใหม่ทั้งหมด  และก็แปลได้ว่าทำงานได้คนเดียวและแบ่งงานกันยากลำบาก เพราะตัวระบบที่เขียนไว้นั้นผูกกันจนแน่นนั้นเอง

   รูปที่ 1.  3 Layered Architecture Diagram

จากหลักการด้านบนหลายคนคงพูดว่า งั้นเราแบ่งชั้นของโค้ด (Layered Architecture) ก็ได้ ซึ่งการแบ่งโค้ดออกเป็นเลเยอร์นั้นเป็นการจำแนกโค้ดชุดที่มีความสัมพันธ์ทำหน้าที่เกี่ยวข้องกันไว้ในชั้นเดียวกัน  โดยแยกเป็น Presentation Layer –> Business Logic Layer –> Data Access Layer   ดังรูปที่ 1.  ด้านบน  วิธีนี้ก็ช่วยให้เราลดความสัมพันธ์ของโค้ดที่ยึดติดกันแน่นได้ในระดับนึง   แต่ก็ยังไม่มีเฟรมเวิร์กเข้ามาช่วยในการจัดการชั้น Presentation Layer แต่อย่างใด เนื่องจากการแบ่งกลุ่มโค้ดเป็นชั้น (Layer) นั้นเป็นการออกแบบโครงสร้างหลวม ๆ นั่นเอง   โดยทั้งนี้เราเองก็สามารถใช้ Web Form จัดการงานต่างๆ ใน Presentaion Layer ก็ได้   ซึ่งคล้ายกันสำหรับ MVC จะเป็นเฟรมเวิร์กเข้ามาจัดการในส่วนโครงสร้างของระบบให้เป็นระเบียบเช่นเดียวกับการทำเลเยอร์   และเราเองก็ยังสามารถใช้เลเยอร์เข้ามาผสมกับการใช้งาน MVC เพื่อสร้างความยืดหยุ่นได้อีกเช่นกัน ซึ่งจะอธิบายในบทความตอนต่อไป

What’s The MVC Pattern

   รูปที่ 2.  Model View Control Diagram

MVC เป็นตัวย่อมาจาก Model / View / Control

Model  สำหรับโมเดลนั้นจะประกอบไปด้วยโครงสร้างคลาสข้อมูลของระบบธุรกิจ (Domain Business) เพื่อนำไปใช้งานใน View และ Controller  โดยความสัมพันธ์ระหว่าง View ก็คือการนำข้อมูลไปทำการ render หรือรับ input กลับเข้ามาในระบบ    และความสัมพันธ์ระหว่าง Controller คือเป็นโมเดลข้อมูล input/output สำหรับ Method ใน controller ไม่ว่าจะ Add/Edit/Delete/Detail  และส่งต่อให้ view เพื่อทำการ render อีกที (กรณีท่านที่ชอบ rich domain มักจะออกแบบ business logic และ Repository ไว้ทำงานที่โมเดล)     ในกรณีที่ระบบงานเล็กต้องการความเร็วในการพัฒนาก็ไม่จำเป็นต้องใช้ Model ก็ได้   อาจจะใช้ Controller ไปสั่งการเรียก Data Access Object  เพื่อส่งผลลัพธ์ที่อาจจะเป็น DataSet กลับไปยัง View ได้ตรง ๆ

Viewสำหรับวิวก็คือ User Interface ของระบบนั่นเอง ซึ่งการทำงานในส่วนของวิวนั้นจะอ้างถึงกล่องโมเดล โดยเพื่อทำการค้นหาและดึงข้อมูลขึ้นมาและแสดงข้อมูลออกมาในรูปแบบที่เราได้กำหนดไว้ในวิวนั้น ซึ่งวิวแต่ละวิวขึ้นอยู่กับ Controller จะเรียกใช้เพื่อ render การทำงาน ไม่ว่าจะเป็นวิวแบบ Add/Edit/Delete และ Detail

Controller และสำหรับการทำงานของคอนโทรลเลอร์ เป็นเสมือนตัวกลางที่ทำงานระหว่างโมเดล (Model) และวิว (View)  ซึ่งเจ้าคอนโทรลเลอร์นี้เอง จะทำงานตามรีเควสจากผู้ใช้งาน ซึ่งจะรู้ว่าเมื่อมีการรีเควสโมเดลนี้ ต้องการคอนโทรลเลอร์ตัวไหน แอคชั่นอะไร ภายในแอคชั่นก็จะไปเรียก Model เพื่อทำงานตาม business อีกที จากนั้นเมื่อทำงานเสร็จเช่นการ Update หรือขอดู Detail ก็จะส่ง data ไปยัง view นั้น ๆ กลับไปแสดงผลพร้อมทั้งนำอ๊อปเจ็คที่สำเร็จไปแสดงผล (กรณีของ anemic model เรามักจะเขียน logic และติดต่อดาต้าเบสที่คอนโทรลเลอร์ซึ่งไม่ค่อยจะดีนัก จะแนะนำภายหลัง)

Advantage of MVC Pattern

  • SoC (Separate of Concern) ช่วยให้เราจัดการความยุ่งเหยิงในการพัฒนาออกเป็นสัดส่วนได้แก่ model, view และ controller
  • รองรับการทำ test-driven development (TDD)
  • เหมาะสำหรับงาน web application ซึ่งรูปแบบการพัฒนานี้สามารถรองรับระบบงานใหญ่และการแบ่งงานกันทำงานภายในทีมพัฒนาทุกขนาด
  • ระบบรองรับการขยับขยายเพิ่มเติมในอนาคต

Hello “ASP.NET MVC“

มารู้จักกับ ASP.NET MVC ซึ่งเราเรียกว่าเฟรมเวิร์กก็ได้เนื่องจากไม่ได้เป็นเพียงแค่คอนเซ็ป แต่ทางไมโครซอฟต์มีไลบราลี่มาให้เราติดตั้งและใช้งาน นำไปพัฒนาต่อยอดระบบได้เลย  มาคุยกันอีกรอบถึงความสามารถของ ASP.NET MVC ซึ่งคงความสามารถเดิม ๆ ของ MVC Pattern ไว้ครบถ้วนทั้งเรื่อง

1. Separate of Concern (SoC) ที่ช่วยแยก logic ออกจากกันอย่างเป็นสัดส่วน ทั้ง User Interface, Business Logic, Data Access Logic  หากมือใหม่ ๆ ที่กำลังหัดเขียนโปรแกรม อาจจะเขียนแยก Function/Method ไว้กลับมาใช้งานอีกรอบ (Reuse)

2. Test-Driven Development (TDD) เนื่องจากโครงสร้างของ ASP.NET MVC นั้นได้ถูกออกแบบด้วย INTERFACEBASED Programming ทำให้เราสามารถจำลองข้อมูล (mock object) เพื่อใช้ในการ input/output ใน method, class ที่เราต้องการทดสอบได้  จึงไม่จำเป็นต้องกด Run Debug (F5) เพื่อทำการทดสอบระบบเหมือนกับ ASP.NET Web Form ที่คอยต้อง input data เข้าไปเพื่อทำการทดสอบโค้ด  และข้อดีอีกคือสามารถเปลี่ยน unit-testing framework ที่พัฒนาบน .NET Frameowrk ได้ตามต้องการอีกด้วย

3. Extensible/Plugable Abilities ความสามารถในการต่อเติมขยับขยายระบบ  เนื่องจากคอมโพเน้นท์ของ ASP.NET MVC นั้นได้ถูกพัฒนามาให้เราสามาถแก้ไขเพิ่มเติม หรือหาอะไรมาทดแทนการทำงานก็ได้ เช่นคุณสามารถนำ View Engine มาใช้งานเอง หรือจะกำหนดการทำงานของ URL Routing เอง และอีกมากมาย  ซึ่งเจ้า ASP.NET MVC นั้นรองรับการใช้งานในลักษณะ Dependency Injection (DI) คือการยิงอ๊อปเจคเข้าไปยังคลาสแทนการเรียกใช้ตรง ๆ โดยอ้างอิงจาก Interface Contract   และยังรองรับการทำงานแบบ Inversion of Control (IoC) ซึ่งเป็นการ reverse ของการเรียกใช้อ๊อปเจคนั้นเอง โดยไปอ่านจาก config ที่กำหนดไว้  โดยทั้ง DI/LoC สามารถนำมาใช้งานเข้ากับ ASP.NET MVC ได้ทุกส่วน ซึ่งการใช้งานวิธีการเหล่านี้จะช่วยให้เราแยกเทสระบบได้อย่างอิสระมากขึ้น

4. Modern Web Programming Support เนื่องจากความสามารถของ Routing ใน ASP.NET MVC มาใช้ในการทำ URL Mapping ทำให้ URL ของเรานั้นดูง่ายและไม่ซับซ้อน ตลอดจนยังสามารถซ่อน extension ของไฟล์ (.aspx ) และพวก Query String ทำให้ URL ดูง่ายจดจำง่ายสะอาดตา ซึ่งความสามารถนี้ยังช่วยในการทำ Search Engine Optimize (SEO) และ REpresentational State Transfer (REST) อีกด้วย

5. ASP.NET Programming Model Support อะไร ๆ ที่เคยโค้ดใน ASP.NET Web Form เราก็ยังนำมาใช้งานได้ด้วยเช่นกัน ไม่ว่าจะเป็น asp.net page (.aspx), user control (.ascx) และ master page (.master) nested master page ซึ่งไฟล์เหล่านี้นำมาใช้เป็น View Template นั้นเอง  อีกทั้งการโค้ดที่ใช้ใน View เราจะใช้ in-line expression (<%= %>) ในการควบคุม logic ของ view นั้น ๆ  นอกจากนั้นก็ยังมีการใช้ Server control + template, การทำ data binding, localization และอีกมากมาย  นอกเหนือที่กล่าวมาด้านบนเจ้า ASP.NET MVC ก็ยังใช้ความสามารถอื่น ๆ ของ ASP.NET ได้อย่างครบถ้วนไม่ว่าจะเป็นการทำ
  • forms authentication / windows authentication
  • URL Authorization
  • Membership and Roles
  • output and data caching
  • session and profile state management
  • health monitoring
  • configuration system
  • provider architecture
ลองสรุปฟีเจอร์ ในแต่ละ version กันดูครับ
ASP.NET MVC v1.0 นั้นทางไมโครซอฟต์ได้ออกเวอร์ชั่นเต็มเมื่อ  09/04/2009 โดยมีฟีเจอร์เด่น ๆ ของการทำงานดังนี้
  • ควบคุม HTML ได้ตามที่ต้องการ (หมายถึงเขียนสคริปเองอย่างเยอะ)
  • สามารถนำ AJAX และ jQuery มาใช้งานร่วมกันได้
  • อนุญาติให้เราสร้าง SEO-friendly URLs สำหรับเว็บไซต์ของเรา ช่วยค้นหาจาก search engine
  • ช่วยทำ Test Driven Development (TDD) เป็นไปโดยง่าย
  • มีโปรเจ็คเท็มเพลทสำหรับ ASP.NET MVC

ASP.NET MVC 2.0 เป็นเวอร์ชั่นล่าสุดที่เพิ่งออกมาเมื่อ 12/03/2010  ซึ่งสามารถทำงานได้เหมือน v1.0 และมีความสามารถเพิ่มเติมตลอดจนปรับเปลี่ยนการทำงาน ซึ่งสามารถใช้วิซาร์ดในการอัพเกรดไปเป็น v2.0 ได้เลย

  • Areas: เป็นการอนุญาติให้เราสามารถทำการแบ่งโมดูลงานของระบบออกเป็นส่วน ๆ  ช่วยให้เราสามารถแยกกันทำงานเป็นทีมได้
  • UI Helpers: เมื่อคุณเลือกสร้างวิวแบบ strong typed ตัว helper จะทำการเลือก control สำหรับแสดงผลของโมเดลที่เหมาะสมให้เองตามลักษณะของข้อมูล ช่วยเพิ่มความรวดเร็วในการพัฒนาระบบงาน ตลอดจนเรายังสามารถ customize template เหล่านี้ตามที่ต้องการได้ และนำกลับไปใช้งานได้
  • Asynchronous controllers: สำหรับ ASP.NET MVC v1.0 ยังเป็นปัญหากับการใช้งาน เพราะถ้ามีรีเควสใดทำงานนานมาก ๆ จะต้องรอจนตัวคอนโทรลเลอร์ทำงานเสร็จ จึงจะรับรีเควสใหม่ได้ (แต่สามารถเขียนเพิ่มเติมได้เองในภายหลัง)  สำหรับ v2.0 ทำมาให้แล้ว โดยให้คอนโทรลเลอร์รองรับการทำงานแบบ async ด้วย
  • Server-side validation: เป็นการอนุญาตให้เราสามารถกำหนดกฎในการตรวจสอบข้อมูลของโมเดลได้ ด้วยการกำหนด attribute หรือเขียนเพิ่มเองก็ได้
  • Client-side validation: เมื่อกำหนดให้โค้ดอนุญาติให้ตรวจสอบโมเดลที่ไคลเอนท์ สคริปต่างๆ จะทำ dynamic validation ให้อัตโนมัติ จากแอททริบิ้วต์ที่กำหนดไว้ในโมเดล

Install ASP.NET MVC 2.0 for VS 2008 SP1

  • ถอนการติดตั้ง ASP.NET MVC 2.0 Preview, RC  เอาออกให้หมด
  • จากนั้นทำการดาวน์โหลด ASP.NET MVC 2.0
  • เมื่อได้มาแล้วก็ทำการติดตั้ง แล้วเสร็จจะได้ project template ของ asp.net mvc มาใช้งานใน vs2008 ของเรา

First Look for ASP.NET MVC 2.0

ต่อไปเราจะมาทดลองเขียนใช้งาน ASP.NET MVC กันเบื้องต้นโดยให้เห็นการทำงานอย่างคร่าว ๆ  เปิด VS 2010 หรือ VS 2008 ของคุณขึ้นมาและลุยกันต่อ

1. ไปที่เมนู File –> New –> Project…

2. เลือกตามรูปที่ 3  Visual C# –> Web –> .Net Framework 4 (choose 3.5 for VS2008)–> เลือก ASP.NET MVC 2 Empty Web Application (จะเป็นโปรเจ็คเทมเพลทที่มีโครงสร้างต่าง ๆ มาให้ค่อนข้างครบ) จากนั้นใส่รายละเอียดดังนี้:

  • Name: ASPNETMVC01,
  • Location:[อะไรก็ได้] ,
  • Solution name: ASPNETMVC

     รูปที่ 3. สร้างโปรเจ็ก ASP.NET MVC 2 Web Application

  รูปที่ 4. สร้าง Unit Test Project

3. จากนั้นจะได้โครงสร้างภายในโปรเจ็คดังภาพที่ 4 ด้านล่าง

   รูปที่  5. ผลลัพธ์

ซึ่งจะขออธิบายดังต่อไปนี้

3.1 ASPNETMVC01 Project

    • Content folder คือโฟล์เดอร์ที่เอาไว้เก็บพวก style sheet, image, icon ประมาณนั้น
    • Controllers folder คือโฟล์เดอร์ที่เอาไว้เก็บโดยแยกเก็บเป็น Controller class ที่ใช้ในการสร้าง method ในการควบคุมสั่งงานต่าง ๆ
    • Models folder คือโฟล์เดอร์ที่เอาไว้เก็บพวกกลุ่ม Domain class ต่าง ๆ ที่จะใช้ในการทำงานกับ Controller และ View
    • Scripts folder คือเอาไว้เก็บ javascript, jquery, microsoft script ต่าง ๆ เป็นต้น
    • Views folder คือโฟลเดอร์สำหรับเก็บ View ที่เราจะสร้างขึ้นเพื่อแสดงผล รับค่าต่าง ๆ
      • Account คือ view ที่สร้างอัตโนมัติโดยโปรเจ็คเทมเพลทนี้เท่านั้น ใช้สำหรับ user account เข้าใช้งานระบบ
      • Home คือ default view ตั้งต้น ส่วนมากจะสามารถเข้าสู่ view นี้เป็นหน้าแรก
      • Shared คือ view ที่จะมองเห็นเรียกใช้ได้จาก view อื่น ๆ ครับ เช่น master page เป็นต้น

3.2 ASPNETMVC01.Tests Project  ตัวนี้จะเป็นเทสโปรเจ็คที่เราสร้างไว้ในตอนสร้างโปรเจ็คก่อนหน้านี้ ซึ่งเอาไว้เทส Controller

4. ทดสอบ Run (F5) ดูครับ จะได้ผลลัพธ์ดังนี้

     รูปที่ 6

ข้อแรก ผู้อ่านจะเห็นว่ามีการใช้งาน Master Page ในโปรเจ็คนี้ด้วย

ข้อสอง ผู้อ่านจะเห็นได้ว่า URL ใน Address Bar ของ Browser จะดูเรียบง่าย

    1. http://localhost:63282/
    2. http://localhost:63282/Home/About
    3. http://localhost:63282/Account/LogOn

5. สำหรับ Unit Test Project ที่เราได้สร้างขึ้นมานั้น Visual Studio จะสร้าง Unit-test Method มาให้เป็นตัวอย่างไว้ศึกษา (ไว้ลงรายละเอียดกันในตอนหลัง)  เราสามารถทดสอบรัน Unit Test Projects ด้วยการกด Crlt+R หรือ Crlt+T  หรือไปที่ Menu –> Test –> Run –> Test in current context  จะได้ผลลัพธ์ดังนี้

รูปที่ 7

How ASP.NET MVC work?

รูปที่ 8 โปรเซสการทำงานระหว่าง ASP.NET Web Form กับ ASP.NET MVC

จากรูปคอลัมภ์ด้านซ้ายจะเป็นโปรเซสการทำงานของ ASP.NET Web Form จะพบว่ามีการใช้งาน Page Class และอาศัยการทำงานของ Postback event ซึ่งทำให้การทำงานนั้นมีความซับซ้อน ส่วนคอลัมภ์ด้านขวาจะเป็นโปรเซสการทำงานของ ASP.NET MVC จะเห็นได้ว่าไม่มีการ Postback event ทำให้ดูเรียบง่ายและเมนเทนได้ง่ายกว่า

รูปที่ 9 Sequence Diagram การทำงานของ ASP.NET MVC Request

1. Browser เมื่อผู้ใช้ได้ส่งคำสั่ง request คำสั่งใด ๆ จาก Browser เข้ามา  เช่นขอหยิบยกตัวอย่างด้านบน http://localhost:63282/Home/About

2. URL Routing  จะนำ URL Request ที่ได้ไปแม๊พเข้ากับ pattern ที่ได้กำหนดไว้ใน Global.asax.cs ตั้งแต่ตอนที่ Application_Start() เรียกเมดธอดที่ชื่อว่า RegisterRoutes()  ซึ่งกำหนดค่าเริ่มต้นไว้ดังนี้ {controller}/{action}/{id}  เมื่อเทียบกับรีเควส  Home/About  ก็จะได้ค่า controller = Home, action = About  ดังนั้น RouteHandler จะไปขอ HomeController จาก ControllerFactory และทำการเรียก About Method ใน HomeController ตาม action ที่ร้องขอมา

3. Controller ในเคสนี้ About Action นั้น เป็นแค่การกำหนดค่า ViewData และสั่ง render Views/Home/About.aspx แค่นั้น    แต่ในการทำงานส่วนใหญ่มักจะมีการเรียกใช้ Model เข้ามาทำงานตามไดอะแกรมด้านบน    ซึ่งใน controller จะทำการเรียก Model เพื่อรัน business method ให้ได้ผลลัพธ์กลับออกมา จากนั้นก็ส่ง Data ที่ได้เข้าไป Render เพื่อให้ได้ ViewResult และหา ViewEngine ได้ที่ตั้งค่าเลือกใช้ไว้ ซึ่ง WebFormViewEngine เป็นของที่มีมาให้ใช้งาน

4. View เมื่อเลือก ViewEngine ได้ก็ทำการ Render HTML กลับไปยัง Browser

Conclusion

หวังว่าบทความตอนนี้คงพอช่วยให้เข้าใจถึงคำว่า MVC และ ASP.NET MVC เทคโนโลยีกันบ้างนะครับ ในตอนหน้าเราจะมาลองโค้ดกัน ด้วยการสร้าง ASP.NET MVC แบบง่าย ๆ เพื่อเอาไว้ทำความเข้าใจทั้งเรื่อง Controller, Routing และ View ในขั้นต้นกัน

Reference http://msdn.microsoft.com


 

Chalermpon Areepong Nine (นาย)

Microsoft MVP Thailand ASP.NET

Greatfriends.biz Community Leader

Email : nine_biz-talk.net at hotmail dotcom

Blog : http://nine-biztalk-net.spaces.live.com/blog

5 Comments »

  1. wow คนแรกเลยนะเนี่ย แค่เริ่มต้นก็น่าสนใจละ ขอนอนรอเสื่อไม่ต้องปูกันเลยแจ่มครับขออีก ^-^

    Comment by wichai — 05/05/2010 @ 2:43 pm

  2. ครับ อยากเปลี่ยนมาใช้ Asp.net mvc ครับ แต่ปัญหาของ Programmer ที่เคยใช้ Asp.net แบบเดิม (Web Form) มักจะไม่ค่อยคุ้นเคยกับภาษา Script (javascript , jquery ,ajax) รวมทั้งไม่ค่อยคุ้นเคยกับ Action ต่างๆของ Htlm Control ดังนั้นทำให้ต้องใช้เวลาเยอะในการศึกษา มีแนวทางที่ช่วยให้สามารถทำงานได้เร็วขึ้นมั้ยครับ รบกวนช่วยแนะนำแนวทางให้หน่อยครับ ว่าจะเริ่มยังงัยดีครับ

    Comment by Thana — 14/05/2010 @ 10:53 am

  3. ขอปูเสื่อรอเรื่อง Unit Testing ครับ เอาแบบเจาะลึกเรื่อง Loadtest logintest validatetest datatest inputtest ฯลฯTest
    อย่าลืมเอาลง GF ด้วยนะครับพี่นาย

    Comment by yokeyoke — 22/02/2011 @ 9:47 pm

    • ok ครับ ไว้จะรีบ รวมเรื่อง DI + ASP.NET MVC จะได้เข้าเรื่อง Unit Test ไวๆ

      Comment by Nine MVP ASP.NET — 23/02/2011 @ 10:23 am

  4. แอบมาส่องบทความเก่าๆ อิอิ ว่าแต่เหมือนบอกให้เลือก project template ผิดตัวนะครับ.
    ถ้าเป็นโปรเจกต์แบบโครงเปล่าๆ (ASP.NET MVC 2 Empty Web Application) ไม่น่าจะมีพวก Account และ Home Controller, Account และ Home View นะครับ.🙂

    Comment by sompu — 23/07/2014 @ 2:20 pm


RSS feed for comments on this post. TrackBack URI

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.

%d bloggers like this: