ฉันต้องใช้เฟรมเวิร์กเมื่อใด [ปิด]


15

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

  • และฉันสามารถสร้างกรอบงานของตัวเองเพื่อมอบคุณสมบัติที่ฉันชอบได้หรือไม่?

3
เมื่อคุณเข้าใจสิ่งที่มีให้และสามารถแก้ไขได้เมื่อจำเป็นให้ใช้กรอบ [xyz] กรอบการทำงานเป็นเครื่องมือที่มีไว้สำหรับคนที่มีทักษะซึ่งรู้วิธีใช้และเข้าใจข้อ จำกัด ของตัวเลือกของพวกเขา อย่าเรียนรู้ภาษาไม่ว่าในกรณีใด ๆ มันเหมือนกับการตั้งใจปิดนิ้วเท้าของคุณหรือมองเห็นส่วนปลาย คำแนะนำเซสชันมีพฤติกรรมที่ผิดปกติขึ้นอยู่กับกรอบ PHP ที่คุณใช้ .. ระวัง :)
Tim Post

คำตอบ:


10

เมื่อคุณสบายใจกับ PHP คุณสามารถเริ่มใช้เฟรมเวิร์กได้ และคุณควรใช้มันเสมอ:

  1. มันเร็วกว่าการเข้ารหัสทุกอย่างอีกมาก
  2. มันทำให้การปรับเปลี่ยนง่ายขึ้นเช่นการเปลี่ยนฐานข้อมูลหรือเปลี่ยนมุมมอง
  3. การทำงานกับคนอื่น ๆ ก็จะง่ายขึ้นเช่นกันเพราะมักจะใช้กับกรอบรูปแบบ MVC ที่ใช้

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


2
+1 สำหรับเมื่อคุณสบายใจกับ PHP คุณสามารถเริ่มใช้เฟรมเวิร์กได้ จุดของคุณ 3) ทำงานได้ดีก็ต่อเมื่อเฟรมเวิร์กคล้ายกันมาก ฉันจะเพิ่ม "อย่าสร้างกรอบก่อนที่จะใช้โครงสร้างที่แตกต่างกันสองสามอย่างมาก"
peterchen

8
ฉันไม่เห็นด้วยอย่างยิ่งกับข้อความที่ว่า "คุณควรใช้มัน" พวกเขาไม่เหมาะสำหรับทุกโครงการและมักจะจบลงด้วยการแก้ไขยากขึ้น สาธารณูปโภคมีคุณค่ามากกว่ากรอบ
Nicole

+1 สำหรับ @NickC ฉันไม่เห็นด้วย เฟรมเวิร์กบางตัวอ้างว่าเป็นแบบไดนามิกและง่ายต่อการเปลี่ยนแปลงสิ่งต่าง ๆ แต่แล้วคุณจะไปถึงจุดหนึ่งและคุณ ... ไม่สามารถทำได้ ผมเคย whinged มากเกี่ยวกับการเรียงลำดับของสิ่งที่ :)
สตีฟฮิลล์

ฉันยอมรับว่า MVC เป็นพื้นฐานทั่วไปที่ดีมากที่ช่วยให้ผู้อื่นสามารถเข้าสู่โค้ดของคุณโดยมีช่วงการเรียนรู้น้อยลงเมื่อใช้อย่างถูกต้อง แต่ MVC เป็นดาวเด่นที่นั่นกรอบ (หรือขาดมัน) เป็นเพียงการดำเนินการ
Tim Post

ทั้งหมดนี้เป็นทฤษฎีและไม่ได้ผลในทางปฏิบัติ กรอบ PHP มีแนวโน้มที่จะทำให้ทุกอย่างยากขึ้น แอปพลิเคชันเฉลี่ยที่เขียนโดยศูนย์จะต้องมีโค้ดเฟรมเวิร์กประมาณห้าถึงห้าพันบรรทัด นั่นคือค่าเฉลี่ยการทำงานประมาณหนึ่งสัปดาห์ หากเป็นมากกว่านั้นคุณอาจจะเขียนห้องสมุดหรือสร้างแพลตฟอร์มภายใน
jgmjgm

9

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

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


2
แต่ฉันจะทำให้แน่ใจในภายหลังว่ารหัสในกรอบตรงตามที่ฉันต้องการได้อย่างไร ฉันหมายถึงโปรแกรมเมอร์ทุกคนมีสไตล์เป็นของตัวเองใช่ไหม สิ่งที่เกี่ยวกับกรอบ !!
Goma

1
@Goma แล้วภาษาล่ะ ฉันยังไม่พบใครที่ทำทุกอย่างตามที่ฉันต้องการ เฟรมเวิร์กเพิ่มบางสิ่งที่คล้ายกันมาก (หวังว่าในระดับที่ค่อนข้างสูงกว่าของนามธรรม) อย่างจริงจังการเขียนโค้ดไม่ได้เกี่ยวกับ“ ทำให้ทุกอย่างดู / ประพฤติ / เป็นอย่างที่ฉันต้องการ” มันเกี่ยวกับการสร้างสิ่งที่มีประโยชน์รหัสเป็นเพียงความรับผิดชอบที่เราต้องรับผิดชอบเพราะประโยชน์เกินกว่าค่าใช้จ่ายของรหัสใน ที่แรก.
Christopher Creutzig

และตอนนี้ @TaylorOtwell เป็นผู้สร้าง Laravel ...
Hos Mercury

4

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

  • เมื่อใดที่ฉันต้องใช้กรอบ PHP เช่น CakePHP เมื่อโครงการของคุณเติบโตเกินกว่าไฟล์ PHP สองสามตัว ช่วงเวลาที่คุณเริ่มแยกตรรกะอย่างชัดเจนในองค์ประกอบที่แตกต่างกันและฟังก์ชั่นการแบ่งส่วน / การแบ่งใช้ (เซสชัน ฯลฯ ) คือเมื่อคุณควรใช้เฟรมเวิร์ก

  • อะไรคือสิ่งที่สิ่งนี้และเฟรมเวิร์ค PHP อื่น ๆ ที่คล้ายกันเสนอให้ฉัน สิ่งที่เป็นนามธรรม; แทนที่จะโต้ตอบโดยตรงกับฐานข้อมูลคุณสามารถใช้การทำแผนที่วัตถุสัมพันธ์ (ORM) เพื่อจัดการโครงสร้างและความสัมพันธ์ระหว่างข้อมูลของคุณในฐานข้อมูล เฟรมเวิร์กส่วนใหญ่ในหลายภาษาจัดเตรียม ORM เพื่อให้ง่ายต่อการโต้ตอบกับเลเยอร์ฐานข้อมูลของแอปพลิเคชันของคุณ ในทำนองเดียวกันกรอบมักจะแยกชั้นของการตอบสนองต่อการโต้ตอบของผู้ใช้ การแยกที่พบมากที่สุดคือกระบวนทัศน์ Model View Controller (MVC) ซึ่งโดยสังเขปแล้วตรรกะฐานข้อมูลเชิงนามธรรมใน Model (ส่วนต่อประสานกับ ORM ในหลาย ๆ กรณี) การประมวลผลคำขอและการโต้ตอบกับแบบจำลองใน Controller และ การเรนเดอร์ HTML / PDF / image / etc จริง ลงในมุมมอง เฟรมเวิร์กมักจะมีเครื่องมืออื่น ๆ เช่นการกำหนดเส้นทาง (เพื่อให้สามารถประมวลผลคำขอที่ซับซ้อนได้ URI (EG: การแมปคำขอ)http://example.com/users/1 "ไปยังผู้ใช้งานคอนโทรลเลอร์ซึ่งจะค้นหารุ่นของผู้ใช้ที่มี ID เป็น 1) และมีการ จำกัด เซสชันและโครงสร้างพื้นฐานอื่น ๆ

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


3

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

เมื่อใดที่ฉันต้องใช้กรอบงาน PHP เช่น CakePHP

ไม่มีคำตอบสากลสำหรับเรื่องนี้ ในฐานะที่เป็นมืออาชีพคุณจะได้รับมอบหมายให้แก้ปัญหาเฉพาะและนี่จะเป็นปัจจัยในการตัดสินใจว่าเมื่อใดและของแต่ละโครงการโดยเฉพาะอย่างยิ่งหากลูกค้ามีความต้องการเฉพาะ แต่โดยทั่วไปแล้วคุณจะใช้กรอบของรูปแบบบางอย่างกับ PHP เว้นแต่ว่าคุณจะแก้ไขหรือขยายแอปพลิเคชันที่มีอยู่แล้วซึ่งมีกรอบของตัวเอง (เช่น Wordpress หรือ PHPBB)

อะไรคือสิ่งที่สิ่งนี้และเฟรมเวิร์ค PHP อื่น ๆ ที่คล้ายกันเสนอให้ฉัน

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

และเป็นสิ่งสำคัญหรือไม่ที่จะใช้กรอบงานเพื่อเป็นมืออาชีพ?

โดยทั่วไปแล้วไม่สำคัญว่าจะต้องใช้กรอบงานเป็นมืออาชีพ แต่ในความเป็นจริงคุณจะไม่มีอาชีพมากนักถ้าคุณไม่คุ้นเคยกับกรอบงานทั่วไปอย่างน้อยสองข้อ PHP ที่ไม่มีเฟรมเวิร์กเหมือนกับ C ++ ที่ไม่มีไลบรารี std คุณไม่จำเป็นต้องใช้และคุณสามารถทำอะไรได้มากกว่าโดยที่ไม่ต้องใช้มันเพราะคุณจะใช้ฟังก์ชัน builing-block ระดับล่างของภาษาโดยตรง แต่จะทำให้คุณต้องทำสิ่งเดียวกันนานขึ้น

และฉันสามารถสร้างกรอบงานของตัวเองเพื่อมอบคุณสมบัติที่ฉันชอบได้หรือไม่?

ใช่. ในความเป็นจริงคุณมีแนวโน้มที่จะทำเช่นนั้นแม้ว่าจะไม่ได้ตั้งใจ โดยสิ่งนี้ฉันไม่ได้หมายถึงกรอบการทำงานที่ขยายตัวได้ทั้งหมด แต่อย่างเช่นกระเป๋าเครื่องมือของฟังก์ชั่นพื้นฐานและสคริปต์ที่ทำงานไม่ธรรมดาหรือทั่วไปพอที่จะจัดการโดยกรอบงานเฉลี่ย Mine นั้นประกอบด้วยระบบไฟล์ต่าง ๆ การจัดการกระบวนการและ rex-ex tid-bits โดยมี curl และ stream / socket utility แตกต่างกันเล็กน้อย


1

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

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

เมื่อคุณเข้าใจว่าเกิดอะไรขึ้นใช้กรอบ! มันทำให้สิ่งต่าง ๆ ง่ายขึ้นมาก crazyness กับการจัดเก็บแบบสอบถามแล้ววนลูปผลกับจะหายไปทั้งหมดลดลงเป็นสายเดียว:mysql_fetch_assoc $book = R::load( "book", $id )คุณจะมีประสิทธิผลมากขึ้นและสามารถแก้ไขข้อบกพร่องในอนาคตหรือเพิ่มคุณสมบัติในอนาคตได้ง่ายขึ้น


1

ใช้เฟรมเวิร์กเมื่อคุณรู้จักเทคโนโลยีพื้นฐานดีพอที่จะรู้ว่าเฟรมเวิร์กทำอะไรให้คุณและทำไมถึงดี (หรือไม่ดี)

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

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


1

เมื่อคุณพบว่าตัวเองกำลังทำสิ่งเดียวกันซ้ำแล้วซ้ำอีกให้มองไปรอบ ๆ และดูว่ามีกรอบที่ทำสิ่งซ้ำซ้อนแบบเดียวกันกับที่คุณจะต้องทำด้วยตัวเองหรือไม่ ไม่เพียงแค่ใช้เฟรมเวิร์กเนื่องจากโฆษณา ฉันชอบ CodeIgniter และ Rasmus Lerdorf's "no-framework PHP MVC framework" http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html


ฉันได้เขียนหลาย ๆ 'no framework frameworks' เพื่อลดความเจ็บปวดจากการเพิ่มฟีเจอร์ใหม่ให้กับไซต์แบบสแตติก (และใหญ่) ที่ส่วนใหญ่นั้นไม่สามารถนำไปใช้กับระบบการจัดการ / สิ่งพิมพ์ประเภทใดได้อย่างง่ายดาย แต่ฉันจะไม่หมุนตัวเองสำหรับโครงการใหม่ (ฉันแค่ใช้ CI หากมีการเรียกกรอบงาน)
Tim Post

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

1
ดูเหมือนว่าฉันได้รับการโหวตจากกรอบความกระตือรือร้นดีมาก!
โปรแกรมเมอร์

Twas ไม่ใช่ฉัน :) มีคนอาจทำปฏิกิริยากับลิงก์ที่คุณโพสต์โดยไม่ได้ลงรายละเอียดเกี่ยวกับมัน
Tim Post

@Tim โพสต์ Heh! นั่นเป็นเหตุผลที่ฉันแน่ใจว่าจะแยกความคิดเห็นทั้งสองนี้ : D
โปรแกรมเมอร์

-1

ฉันขอแนะนำให้คิดให้รอบคอบว่าทำไมคุณถึงใช้เฟรมเวิร์ค x, y หรือ z ทุกกรอบไม่เพียง แต่มีฟังก์ชั่นการใช้งานที่คุณไม่ต้องใช้งานเอง แต่ยังเป็นวิธีการคิดด้วย แค่ดูที่ Spring, JEE, Rails หรือ Django สี่เฟรมเวิร์กให้เพียงพอที่จะกระทืบแอปพลิเคชันเว็บในเวลาอันสั้น

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

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


-2

เฟรมเวิร์กใช้งานได้ดีเสมอตั้งแต่เริ่มต้น มันส่งเสริมการใช้งานรหัสใหม่อ่านได้ดีขึ้นและประหยัดเวลาในการพัฒนาเล็กน้อย

ฉันไม่ได้มีประสบการณ์เกี่ยวกับ PHP มากนัก แต่ฉันอยากจะสนับสนุนการใช้กรอบงานใด ๆ


ทำไมลงคะแนน?
Pierre Pretorius
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.