MVC เป็นเพียงแค่ SEO ของการเขียนโปรแกรม PHP หรือไม่


9

มีกรอบ PHP จำนวนหนึ่งพันล้านอัน และส่วนใหญ่ของพวกเขาเรียกเก็บเงินตัวเองเป็นดังต่อไปนี้รูปแบบ MVC ในขณะที่ยินดีที่จะเอาชนะรูปแบบการเข้ารหัส osCommerce (ตรรกะการประมวลผลอย่างมากผสมกับ SQL และ HTML) แต่ก็มีวิธีที่ง่ายกว่าและง่ายกว่าในการทำตามแนวทางเพื่อให้ได้การออกแบบแอปพลิเคชันที่คงไว้ได้

แนวคิด MVC ดั้งเดิมได้รับการกำหนดเป้าหมายที่แอปพลิเคชัน GUI และสำหรับ Gtk / Python ดูเหมือนจะเป็นไปได้ที่จะทำตามนั้น แต่เว็บแอป PHP ไม่ทำงานบน live Views (องค์ประกอบ GUI) และรันไทม์คอนโทรลเลอร์แบบต่อเนื่อง มันค่อนข้างผิดถ้ามันอธิบายการใช้การจัดกลุ่มไดเรกทอรี + รหัสหรือการตั้งชื่อคลาส

ดูเหมือนว่า "MVC" จะถูกใช้เหมือน buzzword สำหรับกรอบงาน PHP และฉันเคยเห็นเฟรมเวิร์ค PHP ที่เป็นผู้ใหญ่หนึ่งหรือสองเฟรมยอมรับแล้ว แต่นิยามวลีใหม่เพื่อจับคู่ interna
ปกติแล้วน้ำมันงูจะเป็นอย่างไร เหตุใดจึงไม่ใช้คำศัพท์ที่ดีกว่าและแนวคิดที่เหมาะสมกว่าสำหรับการเผยแพร่ PHP แบบบำรุงรักษาได้

การใช้เหตุผลบางอย่างละเอียด

ทำไมฉันสงสัยว่าการใช้งาน PHP ไม่เป็นไปตามรูปแบบ MVC จริง:

แบบจำลอง : ตามทฤษฎีแล้วแบบจำลองควรอ้วนและมีตรรกะทางธุรกิจและตัวควบคุมควรเป็นตัวจัดการแบบบาง (อินพุต -> เอาต์พุต) ในความเป็นจริง PHP frameworks สนับสนุนแบบจำลองตื้นๆ CI และ Symfony เช่นถือเอา Model == ORM แม้กระทั่งคอนโทรลเลอร์ HTTP ที่จัดการโดยอินพุตก็ยังไม่ถือว่าเป็นรูปแบบ

Views : การแก้ปัญหาด้วย AJAX ลดราคาไม่สามารถมี Views บนหน้าเว็บได้ กรอบ PHP ยังคงปั๊มหน้า อินเทอร์เฟซยังคงเป็นไปตามรูปแบบ HTTP ปกติอย่างมีประสิทธิภาพไม่มีประโยชน์จากแอปพลิเคชันที่ไม่ใช่ MVC (และสุดท้ายไม่มีเฟรมเวิร์ก php ที่แพร่หลายสามารถส่งออกไปยัง GUI Views แทน HTML ได้จริง ๆ แล้วฉันเคยเห็นไลบรารี PHP ที่สามารถใช้งาน Gtk / Console / Web ได้ แต่เฟรมเวิร์กไม่ได้)

ผู้ควบคุม : ฉันไม่แน่ใจ ตัวควบคุมอาจไม่จำเป็นต้องทำงานในระยะยาวและทำงานอย่างต่อเนื่องในรูปแบบ MVC ในบริบทของเฟรมเวิร์ก PHP พวกมันส่วนใหญ่ร้องขอตัวจัดการ ไม่ใช่สิ่งที่จะได้รับการโต้แย้งเกี่ยวกับมัน แต่มันก็รู้สึก buzzwordish เล็กน้อย

จะมีคำอธิบายที่ดีขึ้นหรือไม่ ฉันเห็นคำย่อเช่น PMVC หรือ HMVC โยนไปรอบ ๆ แม้ว่าคำอธิบายจะคลุมเครือมากขึ้น แต่สิ่งเหล่านี้อาจอธิบายถึงกรอบเว็บปัจจุบันที่ไม่ค่อยมีใครรู้?


ดังนั้นโดยสรุป: กรอบ PHP ใช้แนวคิดที่คล้ายกับ MVC ดั้งเดิม ฉันคิดว่ามันถูกจับที่ดีที่สุดที่นี่: stackoverflow.com/questions/1549857/simple-php-mvc-framework/…
mario

ฉันประหลาดใจที่ได้อ่านว่า "กรอบงาน PHP ส่วนใหญ่ใช้ Views เป็นหน้าเว็บอย่างง่าย" ในกรอบ PHP ทั้งหมดที่ฉันเคยใช้มุมมองสามารถเป็นอะไรก็ได้มันเป็นแค่แม่แบบ HTML ดังนั้นอาจเป็นกล่องข้อความแถบด้านข้างแถบนำทางบล็อกข้อความคงที่หรือแม้กระทั่งเค้าโครงหน้ากระดาษ ฉันไม่สามารถนึกถึงกรอบใด ๆ ที่ไม่อนุญาตให้คุณฝัง Views ภายใน Views ให้คุณทำอะไรได้มากตราบใดที่ตรรกะทางธุรกิจ / การประมวลผลที่แท้จริงของคุณเสร็จสิ้นใน Controller ก่อน
Lotus Notes

รุ่น (ไม่พหูพจน์) เป็นชั้น ไม่ใช่ไฟล์เดียวหรือคลาสเดียว มันคือชุดของวัตถุโดเมนแมปข้อมูลและบริการ อ่านนี้
James

3
... SEO? "การเพิ่มประสิทธิภาพกลไกค้นหา"?
Izkata

คำตอบ:


12

ฉันคิดว่าคุณกำลังดูสิ่งนี้ในทางที่ผิด แอพ GUI และหน้าเว็บแยกออกจากกันดังนั้นคำจำกัดความที่เหมือนกันของ MVC จะไม่ทำงานทั้งคู่ MVC เป็นเรื่องเกี่ยวกับอุดมคติ: การแยกบางส่วนของแอพเช่นการแสดงผลและตรรกะ

ใน PHP (หรือเว็บทั่วไป) Viewคือเว็บเพจเอง: เอาต์พุต HTML ไม่ใช่ "สด" ตามคำจำกัดความของคุณ แต่คุณเพียงแค่คลิกลิงค์เพื่อกลับไปที่ตัวควบคุม (เช่นคำขอหน้าอื่น)

ควบคุมและรุ่นคือสิ่งที่ไม่แตกต่างกันเช่นคุณอธิบาย ใน PHP โมเดลมีแนวโน้มที่จะเป็นเลเยอร์ข้อมูลโต้ตอบกับฐานข้อมูลและอื่น ๆ แต่มันยังคงเป็นการจำลองสถานการณ์และคอนโทรลเลอร์ยังคงควบคุมโฟลว์แอปพลิเคชันหากเพียงหนึ่งครั้งต่อการโหลดหน้าเว็บ

ดังนั้นชื่อ "Model-View-Controller" จึงเป็นตรรกะที่สมบูรณ์แบบแม้ว่าจะมีการใช้งานที่แตกต่างกันในแอพ GUI และเว็บแอป


ฉันไม่มีข้อโต้แย้งกับแนวคิดนามธรรมของ MVC เป็นสิ่งที่ฉันคัดค้านว่าเฟรมเวิร์ค PHP ไม่น่าไว้วางใจเพียงแค่ใช้งาน Passive-MVC แม้แต่รูปแบบ "Model-View-Presenter" ก็เป็นคำอธิบายที่สมจริงยิ่งขึ้น แต่ต้องแน่ใจว่าจะต้องก้มข้อกำหนดเมื่อคุณใช้กับโดเมนอื่น คำถามเดิม คำที่ดัดงออาจทำให้เป็นคำศัพท์
มาริโอ

3

เนื่องจากฉันไม่ทราบกรอบ PHP สิ่งนี้จะเห็นได้จากมุมมองภาษาระดับต่ำ

รุ่น:

โดยทฤษฎีแล้วตัวแบบควรอ้วนและมีตรรกะทางธุรกิจ

เป็นสิ่งที่ต้องทำอย่างสมบูรณ์ฉันไม่เห็นว่า PHP ทำอะไรกับสิ่งนี้ ...

โมเดลเป็นคลาสข้อมูลใน PHP ซึ่งอาจสื่อสารกับฐานข้อมูล
จากนั้นคุณสามารถส่งโมเดลเดียวกันหรือโมเดลบางส่วนในรูปแบบ JSON ไปยังไคลเอนต์

ฉันจะไม่พูดตรรกะทางธุรกิจมันเหมือนกับตรรกะข้อมูล (การตรวจสอบความถูกต้องการโต้ตอบกับฐานข้อมูลการนำเข้า / ส่งออก ... )

และตัวควบคุมควรเป็นตัวจัดการแบบบาง (อินพุต -> เอาต์พุต)

คลาส Controller ของคุณมีปฏิสัมพันธ์กับคลาส Model พวกมันบางจริง ๆ

ขึ้นอยู่กับเอาต์พุตให้ทำบางสิ่งกับโมเดล ... และส่งคืน ModelView ไปยังไคลเอ็นต์ ...

ในความเป็นจริง PHP frameworks สนับสนุนแบบจำลองตื้น ๆ CI และ Symfony เช่นถือเอา Model == ORM แม้กระทั่งคอนโทรลเลอร์ HTTP ที่จัดการโดยอินพุตก็ยังไม่ถือว่าเป็นรูปแบบ

ฉันไม่ได้ตระหนักถึงกรอบ PHP เหล่านั้น ...

แต่อินพุต HTTP ควรได้รับการจัดการก่อนที่จะถึงตัวควบคุม
คุณสามารถสร้างคลาสที่เปลี่ยนข้อมูล GET และ POST ให้เป็นเส้นทางและพารามิเตอร์ที่ดีได้อย่างง่ายดาย

นี่คือสิ่งที่เกิดขึ้นใน ASP.NET MVC 2 และไม่มีอะไรผิดปกติกับมัน
ฉันไม่รู้ว่าจะเกิดอะไรขึ้นกับ PHP แต่ฉันเดาว่ามันจะเกี่ยวข้องอย่างใกล้ชิด

คุณสามารถเปลี่ยนข้อมูล GET และ POST เป็นแบบจำลองได้อย่างง่ายดายแบบจำลองอาจมีตรรกะตัวสร้างสำหรับสิ่งนั้น หรืออาจเพิ่มคลาสที่แยกต่างหากสำหรับจุดประสงค์นั้น


การเข้าชม:

วิธีแก้ปัญหาด้วย AJAX ลดราคาไม่สามารถดูได้บนหน้าเว็บ กรอบ PHP ยังคงปั๊มหน้า

ฉันไม่เห็นสาเหตุที่ไม่สามารถทำได้ความแตกต่างเพียงอย่างเดียวคือโปรโตคอลและ PHP สามารถส่งคืน JSON และอื่น ๆ ...

หน้าคือมุมมองของคุณและสามารถร้องขอและอัปเดตผ่าน AJAX + JSON
อีกครั้งฉันไม่ได้ตระหนักถึงกรอบ PHP เหล่านั้น แต่ใน ASP.NET MVC 2 มันใช้งานได้

อินเทอร์เฟซยังคงเป็นไปตามรูปแบบ HTTP ปกติอย่างมีประสิทธิภาพไม่มีประโยชน์จากแอปพลิเคชันที่ไม่ใช่ MVC (และสุดท้ายไม่มีเฟรมเวิร์ก php ที่แพร่หลายสามารถส่งออกไปยัง GUI Views แทน HTML ได้จริง ๆ แล้วฉันเคยเห็นไลบรารี PHP ที่สามารถใช้งาน Gtk / Console / Web ได้ แต่เฟรมเวิร์กไม่ได้)

ข้อได้เปรียบเดียวที่คุณจะได้รับ (และเหมือนกับแอปพลิเคชันทั่วไป) คือการแยกออกเป็นแบบจำลอง (ข้อมูล) + มุมมอง (GUI) + ตัวควบคุม (ตรรกะ) ในทำนองเดียวกันคุณจะไม่เห็นเฟรมเวิร์ก C ++ ที่สามารถส่งออกไปยัง HTML หรือ JSON แทน GUI Views ได้


ควบคุม:

ฉันไม่แน่ใจ ตัวควบคุมอาจไม่จำเป็นต้องทำงานในระยะยาวและทำงานอย่างต่อเนื่องในรูปแบบ MVC ในบริบทของเฟรมเวิร์ก PHP พวกมันส่วนใหญ่ร้องขอตัวจัดการ ไม่ใช่สิ่งที่จะได้รับการโต้แย้งเกี่ยวกับมัน แต่มันก็รู้สึก buzzwordish เล็กน้อย

MVC เป็นสถาปัตยกรรม / รูปแบบของซอฟต์แวร์ที่คอนโทรลเลอร์ทำงานและนานแค่ไหนที่ไม่รวมตัวกัน


1

แต่เว็บแอป PHP ไม่ทำงานบน live Views (องค์ประกอบ GUI) และรันไทม์คอนโทรลเลอร์แบบต่อเนื่อง

ไม่พวกเขาแน่ใจว่าทำ!

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

คอนโทรลเลอร์ยังคงอยู่เนื่องจากคุณสามารถใช้คุกกี้ / เซสชันได้

ดูเหมือนว่า "MVC" จะถูกใช้เหมือน buzzword สำหรับกรอบงาน PHP

MVC เป็นสถาปัตยกรรมซอฟท์แวกรอบบางคนอาจจะใช้มันเป็นฉวัดเฉวียน แต่คนอื่นทำมันถูกต้อง ...
ดูรายชื่อของกรอบบางอย่างเกี่ยวกับวิกิพีเดีย

MVC เป็นเพียงแค่ SEO ของการเขียนโปรแกรม PHP หรือไม่

MVC และ SEO เป็นสองสิ่งที่แตกต่างกัน แต่ใช่ ... MVC กำลังได้รับความนิยมมากขึ้น


1
แน่นอนว่าองค์ประกอบ AJAX UI นำมาใกล้ยิ่งขึ้น แต่นั่นเป็นวิธีแก้ปัญหา และมันก็ดูเหมือนว่าจะดัดคำจำกัดความ (Btw, ฉันรู้ Cappucino.org และชุดเครื่องมืออื่น ๆ จริง แต่ถูก refereing การขั้นต้นของกรอบ PHP ได้.)
มาริโอ

จะไม่เรียกว่าเป็นวิธีแก้ปัญหาคุณอาจนับ Qt และกรอบงานอื่น ๆ เป็นวิธีแก้ปัญหาด้วยเช่นกัน ... มีเพียงค่าใช้จ่ายในการถ่ายโอนข้อมูลระหว่างเซิร์ฟเวอร์และไคลเอนต์และด้วยความเร็วการเชื่อมต่อและเวลาแฝง อีกต่อไป ฉันไม่เห็นว่ามันเป็นคำจำกัดความของรูปแบบ: รูปแบบแยกตรรกะโดเมน (ตรรกะแอปพลิเคชันสำหรับผู้ใช้) จากอินพุตและการนำเสนอ (UI) อนุญาตการพัฒนาอิสระการทดสอบและการบำรุงรักษาของแต่ละคน
Tamara Wijsman

1
ฉันเห็นสิ่งที่คุณหมายถึง ถ้าคุณตีความ PHP ว่าเป็นแอพพลิเคชันเซิร์ฟเวอร์และ AJAX เป็นกลไก RPC ระหว่างตรรกะและ UI ก็ใช่ ฉันจะยังคงเรียกมันว่าวิธีแก้ปัญหาบน HTTP อย่างไรก็ตาม OTOH ไม่แน่ใจว่าเกี่ยวข้องกับ MVC หรือไม่ ฉันคิดว่าฉันคัดค้านความหมายที่ว่า "" "MVC" "" เท่านั้นที่ให้การตอบสนองและโต้ตอบกับเว็บที่คุณอธิบาย
มาริโอ

-1

ในความคิดของฉันใช้ MVC ใน php นำโปรแกรมเมอร์ไปยังเว็บ ง่ายกว่าที่จะได้รับจาก Java เช่น PHP เมื่อคุณรู้วิธีทำงานกับ MVC


+1 แต่มันเป็นเพียงข้อได้เปรียบด้านคำศัพท์หรือมีกรอบ PHP ที่ใกล้เคียงกับการใช้งาน Java (และ implicitely ที่คุณกำลังพูดคุยเกี่ยวกับ Java GUIs หรือเว็บ / Struts?)
มาริโอ

ฉันไม่ทราบแน่ชัด แต่ฉันใช้เฟรมเวิร์กของ zend และฉันคิดว่ามันเหมือนกันกับเฟรมเวิร์ก MVC อื่น ๆ : มันสำคัญมากที่จะรู้ว่าต้องทำอย่างไรในแบบจำลองของคุณมุมมองและตัวควบคุมและช่องว่างระหว่างโลกแห่งการเขียนโปรแกรม โลกถูกปิด อาจจะอายุเกินเกณฑ์ของการจบการศึกษาและฉันชอบที่จะเห็นสิ่งนั้น มันบั๊กเกินไป
baklap
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.