ทำไม Zend Framework จึงซับซ้อน?


42

ฉันเป็นนักพัฒนาเว็บและมีประสบการณ์ในการพัฒนาเว็บแอปพลิเคชั่นหลายตัวใน PHP ฉันมีความคิดในการพัฒนาผลิตภัณฑ์สำหรับตัวเองและตัดสินใจที่จะใช้เฟรมเวิร์กที่ใช้ MVC เพราะฉันชอบแนวคิดของ MVC มากและวิธีที่หนึ่งสามารถจัดการและแก้ไขแอปพลิเคชันได้อย่างง่ายดาย

ฉันเลือก Zend Framework และดูเหมือนยากกว่าการเรียนรู้ภาษาโปรแกรมใหม่ มีหลายสิ่งหลายอย่างเกิดขึ้นพร้อมกันแม้กระทั่งเพื่อเรียกใช้แอปพลิเคชันขนาดเล็ก

แนวคิดการกำหนดเส้นทางในทำนองเดียวกันนั้นซับซ้อนมากเนื่องจากเป็นเรื่องใหม่สำหรับโปรแกรมเมอร์หลัก ฉันรู้ว่าพวกที่นี่อ่านคำถามหลายพันคำถามแบบเดียวกับที่ฉันถาม แต่ฉันไม่ต้องการเรียนรู้ Zend Framework ข้ามคืน ฉันยินดีที่จะให้เวลามากที่สุดเท่าที่มันต้องการ แต่จนถึงขณะนี้มันไม่มีเหตุผลสำหรับฉัน มีหลายพันชั้นเรียนในห้องสมุด Zend แต่ noob จะทราบได้อย่างไรว่าจะใช้ class specfic ได้อย่างไรและใช้อย่างไร ฉันยังคงพบว่ามันยากมากที่จะเข้าใจ bootstrap ของ Zend Framework และการแมป ฉันอ่านคู่มือปฏิบัติตามและสิ่งต่าง ๆ เริ่มต้นทำงาน แต่ฉันก็ไม่ทราบว่ามันเกิดขึ้นจริง ๆ

ฉันยังไม่มีเงื่อนงำว่าแบบจำลองมุมมองและตัวควบคุมทำงานร่วมกันอย่างไรและวิธีการวางแผนแอปพลิเคชันใน Zend Framework เมื่อพูดถึง core php ฉันมีความคิดในใจว่าจะต้องทำอะไรและแปลมันง่ายกว่าในรหัส แต่ใน Zend Framework ฉันไม่รู้วิธีแปลความคิดของฉัน


10
หากคุณยังใหม่กับ MVC ให้ใช้ MVC นั่งร้านด้วยตัวคุณเองก่อนที่จะใช้แบบเต็มรูปแบบ - สิ่งเหล่านี้ไม่ดีสำหรับการเรียนรู้
treecoder

2
@greengit นั่นคือสิ่งที่ฉันทำ!
Kyle Hodgson

Zend Framework นั้นไม่ยากต้องใช้เวลาในการเรียนรู้เนื่องจากเอกสารที่ไม่ดี แต่ฉันมั่นใจได้ว่ามันเป็นกรอบที่ทรงพลังมาก เราได้สร้างซอฟต์แวร์สำหรับองค์กรขนาดใหญ่บน ZF2 และความยืดหยุ่นในการกำหนดค่าเป็นเรื่องพิเศษใน ZF
albanx

คำตอบ:


38

Zend Framework นั้นยาก มันก็ไม่ได้สร้างขึ้นเพื่อเป็นกรอบรายการระดับความรู้ของแนวคิดที่เกี่ยวข้องกับการสันนิษฐาน1 ที่กล่าวว่าข้อกำหนดแรกสำหรับ Zend Framework 2.0คือการทำให้ง่ายขึ้นนิดหน่อย:

ทำให้เส้นโค้งการเรียนรู้ง่ายขึ้น

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

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

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

เนื่องจากคุณยังคงเรียนรู้มันจะมีค่ามากขึ้นในการสร้างสถาปัตยกรรม MVC ของคุณเอง Rasmus Lerdorf ของฉาวโฉ่2 " ไม่มีกรอบกรอบ PHP MVC " บล็อกโพสต์ให้เป็นตัวอย่างที่ง่ายมากและสะอาดของ MVC ผ่านขั้นตอน PHP, โดยไม่ต้องกรอบใด ๆ หรือห้องสมุดของบุคคลที่สามอื่น ๆ ที่เกี่ยวข้อง

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

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

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

2อ่านข้อจำกัดความรับผิดชอบที่ด้านบนของโพสต์บล็อก


อัพเดตได้แรงบันดาลใจจากความคิดเห็นของ @ Karpie:

กรอบไม่ควรจะยากจุดรวมของกรอบคือการทำให้สิ่งต่าง ๆ ง่ายขึ้น เป็นไปได้ว่าแม้จะมีแนวคิดที่เกี่ยวข้องอย่างแน่นหนา ZF ก็ไม่เหมาะสำหรับคุณ

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

หากคุณรู้แนวคิดกรอบไม่ควรได้รับในทาง


3
แม้จะมีความรู้เกี่ยวกับแนวความคิดมันก็เป็นการยากที่จะเข้าไปและพูดตามตรงฉันไม่คิดว่ามันคุ้มค่ากับความพยายาม เอกสารมักจะผิดตัวอย่างบนเว็บหลังจากมักจะล้าสมัยช่องทางการสนับสนุน IRC มักจะตายและจากสิ่งที่ฉันได้เห็นไม่มีสถานที่อื่นที่จะได้รับการสนับสนุน
sevenseacat

@Karpie ฉันไม่พบว่ามันยากที่จะซื่อสัตย์ แต่มันเป็นเรื่องของสำนวนดังนั้นมันจึงเหมาะกับนักพัฒนาบางคนดีกว่าคนอื่น เช่นฉันเข้าใจได้ง่ายกว่า CodeIgniter แต่นั่นเป็นเพราะกระบวนการส่วนตัวของฉัน: ฉันชอบอ่านโค้ดมากกว่าเอกสารและรหัสของ CI เต็มไปด้วยอึจิตใจของฉันปิดตัวลง แต่สำหรับนักพัฒนาส่วนใหญ่ CI นั้นเรียนรู้ได้ง่ายกว่า ZF และทุกคนไม่เห็นด้วยว่าโค้ดของ CI นั้นเต็มไปด้วยอึ สิ่งสำคัญคือกรอบไม่ควรใช้ยากถ้ามีคนอื่นออกมี
yannis

ฉันพบว่า Zend Framework 1 นั้นง่ายต่อการเข้าใจ แต่คุณกล่าวว่าความคิดที่อยู่เบื้องหลัง ZF2 คือการทำให้มันง่ายขึ้นผมรู้สึกว่ามันมากมากขึ้นซับซ้อนกว่าที่เคย
ซื้อ 777

ทุกอย่างใน ZF2 นั้นซับซ้อนเกินไป มันจะโอเคที่จะนำเสนอ "framework" ของ Zend เพื่อเป็นคอลเลกชันของโมดูล / ไลบรารี กรอบงานจริงหายไป ไม่มีเลเยอร์โมเดลดังนั้นคุณต้องดำเนินการเองซึ่งโดยปกติจะเป็นระเบียบหรือใช้ Doctrine ซึ่งจำเป็นต้องมีการบูรณาการ ในการเขียนการทดสอบหน่วยบางอย่างคุณต้องใช้เวลาในการถอดรหัสคู่มือและการเขียน (หรือพยายามหาทางออนไลน์) เพื่อเขียนโค้ดเพื่อเริ่มการทดสอบของคุณ แม้ว่ามันจะถูกสร้างขึ้นด้วยแนวคิดเรื่องเสียงการตีความแนวคิดเหล่านั้นแย่มาก
vladko

11

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

ไม่มีอะไรผิดปกติกับการมีวิธีการตั้งค่าที่ชัดเจนหรือชื่อ params มันจะ imo ไปทางยาวเพื่อช่วยในการค้นพบ

กรอบ Yii ยิ่งแย่กว่านี้อีก


3
+1 เหตุผลสำคัญของฉันที่จะไม่พิจารณาการดูดซึม ZF / ZF2 อย่างจริงจังต้องเป็นสิ่งที่น่าเกลียดสมบูรณ์แบบอัตโนมัติ / เป็นนัยและมีความรู้สึกภายในที่หลบหลีกการกำหนดค่าตามอาร์เรย์ที่ซ้อนกัน มันเป็นการละเมิดความไม่ชอบส่วนตัวของฉันเกี่ยวกับการใช้อาร์เรย์ในโลก OO มากเกินไป
Gavin Howden

1
ความเห็นของฉันก็แม่นยำเช่นกัน
Daniel

ฉันไม่พบว่า Yii 1 ยากเกินไป บางทีสำหรับฉัน : P
Eugine Joseph

5

ปัญหาบางอย่างกับ ZF ซึ่งทำให้น่ารำคาญ (และยากสำหรับผู้เริ่มต้น) ในการทำงานกับ:

ไม่รวมการออม ใครจะคิดว่านี่ควรเป็นฐานของกรอบ MVC ที่ทันสมัยมาก แต่ ZF มาพร้อมกับZend_Db_Tableซึ่งเป็นระดับต่ำอย่างน่าขัน คุณสามารถใช้ Doctrine ได้ แต่หลังจากนั้นคุณก็สามารถใช้งานร่วมกับ ZF ได้

อ่านไม่ได้เราเตอร์ URL ป่อง ตัวอย่างเช่นใช้รหัส 9 บรรทัดเพื่อกำหนดเส้นทางที่ง่ายที่สุด:

$route = new Zend_Controller_Router_Route(
    'archive/:year',
    array(
        'controller' => 'archive',
        'action'     => 'show'
    ),
    array('year' => '\d+')
);
$router->addRoute('archive', $route);

ได้รับปริมาณของคำถามที่เกี่ยวข้องกับการนี้มันเป็นอะไรที่เรียบง่าย แต่สำหรับคนส่วนใหญ่ นอกจากนี้ฉันไม่สามารถช่วยได้และเปรียบเทียบกับ Django ซึ่งเทียบเท่ากับข้างต้น

url(r'^archive/(?P<year>\d+)/$', 'archive.show')

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

ไดเรกทอรีป่องและรูปแบบไฟล์ โครงสร้างไดเรกทอรีที่แนะนำมีลักษณะดังนี้:

<project name>/
    application/
        configs/
            application.ini
        controllers/
            helpers/
        forms/
        layouts/
            filters/
            helpers/
            scripts/
        models/
        modules/
        services/
        views/
            filters/
            helpers/
            scripts/
        Bootstrap.php
    data/
        cache/
        indexes/
        locales/
        logs/
        sessions/
        uploads/
    docs/
    library/
    public/
        css/
        images/
        js/
        .htaccess
        index.php
    scripts/
        jobs/
        build/
    temp/
    tests/

4

Zend Framework เป็นเหมือนห้องสมุดอิสระที่ทำงานร่วมกันเป็นกรอบ มันยากมากที่จะพัฒนาบางสิ่งในเวลาเดียวกันและแยกชิ้นส่วนและ "ใช้งานง่าย" สำหรับ "ใช้งานง่าย" ฉันหมายถึงการทำสิ่งที่ซับซ้อนด้วยโค้ดไม่กี่บรรทัด

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

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

นั่นเป็นเหตุผลที่ฉันคิดว่า Zend Framework มีความซับซ้อนมากขึ้นเพราะมันแยกได้มากและคุณสามารถใช้คลาสของมันในโครงการอื่น ๆ ที่ไม่ได้ใช้ ZF


3

Zend Framework ต้องการการต่อสายดินที่มั่นคงใน OOP และรูปแบบการออกแบบ จากประสบการณ์ของฉันฉันพบเฉพาะโปรแกรมเมอร์ Java-JEE-Struts-Spring ที่คุ้นเคยกับ Zend Framework อย่างง่ายดาย ผู้พัฒนา PHP เฉลี่ยพบว่าเป็นการยากที่จะแยกย่อยแนวคิดและสถาปัตยกรรมที่อยู่เบื้องหลัง Zend Framework แต่ดูเฮ้! Zend Framework มาจาก บริษัท 'Zend' ที่สร้าง PHP ขึ้นมาเป็นอันดับแรก ดังนั้นจึงจำเป็นต้องมีความคิดบางอย่างถ้าไม่เคารพ!


1
Rasmus Lerdorf สร้าง php, zend เป็นผู้สนับสนุนระดับสูงของ php จากสิ่งที่ฉันจำได้
Sarmen B.

ไม่เห็นด้วยที่นั่น ฉันเป็นนักพัฒนา Java ฉันไม่เพียง แต่พบหนทางสู่ ZF อย่างง่ายดาย แต่ชอบไปยังกรอบงานอื่น ๆ
jkushner

-2

ฉันเชื่อว่า zend เป็นเพียงการทำให้สิ่งที่ซับซ้อน MVC เป็นเพียงการฉ้อโกงอย่างมีเหตุผลมันทำงานเหมือน PHP ธรรมดา แต่คุณกำลังพัฒนามันอยู่หน้า MVC เช่นการแยกไฟล์ในไดเรกทอรีที่แตกต่างกัน

โปรดจำไว้ว่าใครที่พูดว่า Zend ปลอดภัยและไม่สามารถแฮ็คได้ Zend สามารถแฮ็คได้อย่างง่ายดายหากคุณไม่ได้ใช้การป้องกันการฉีดของ Mysql ฉันอยากจะแนะนำให้คุณกำหนดฟังก์ชั่นของคุณเองจากนั้นแยกไฟล์ของคุณในไดเรกทอรีต่าง ๆ เพื่อให้คล้ายกับ MVC บันทึกฟังก์ชั่นคลาสและเนื้อหาหลักอื่น ๆ ในไดเรกทอรีเดียวที่เรียกว่าคอนโทรลเลอร์แล้วเพิ่มหน้าเว็บของคุณในไดเรกทอรีต่างๆ เพื่อรวมไฟล์ฟังก์ชั่นเหล่านี้ไดเรกทอรีนี้จะรู้ว่าเป็นมุมมอง วางไฟล์ javascript และ css ของคุณในไดเรคทอรีต่าง ๆ ซึ่งจะเรียกว่าแบบจำลอง

โปรดจำไว้ว่าในโลกนี้ผู้คนจำนวนมากมักจะทำงานหนักเพื่อทำให้สิ่งที่ซับซ้อนมากขึ้นเพราะพวกมันซับซ้อนที่จะเข้าใจ

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


-6

อย่างน้อย "การเริ่มต้นอย่างรวดเร็ว" thingy ต้องง่ายขึ้นเพื่อที่จะทำให้เฟรมเวิร์กเป็นมิตร ..... ถ้าคุณต้องการบางสิ่งที่ยากกว่าเป็นสิ่งที่ดีกว่าฉันจะบอกว่า "ZF เป็นเฟรมเวิร์ค PHP ที่ดีที่สุด" ฉันดาวน์โหลด ZF-2 และทดลองใช้แล้ว (โดยแท้จริงแล้วฉันเป็นมือใหม่กับ ZF) สิ่งที่น่าเศร้าก็คือฉันยังไม่พบ "คู่มือเริ่มต้นใช้งานอย่างรวดเร็ว" ที่มีโครงกระดูก Project ง่ายๆบนอินเทอร์เน็ต สิ่งที่ฉันกำลังมองหาคือวิธีง่ายๆในการรวมไฟล์ไลบรารีและสร้างโฟลเดอร์โครงการที่มีคุณสมบัติ MVC ฉันใช้ Codeigniter, Cake php, Yii แต่ฉันพบว่ามันค่อนข้างไม่เป็นมิตร ใช่ฉันรู้ว่า Zend อัปเกรด PHP แต่ไม่ได้หมายความว่าเป็นกรอบที่ดีที่สุดหรือสิ่งที่คุณจะพูด


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