สถาปัตยกรรม / ออกแบบเว็บแอปพลิเคชัน PHP [ปิด]


20

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

  • แยกส่วนหลังออกจากส่วนหน้า
  • โครงสร้างไดเรกทอรี

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


Hi! สถาปัตยกรรมที่พบบ่อยที่สุดสำหรับเว็บแอปพลิเคชันคือMVCสำหรับ PHP และแพลตฟอร์มเว็บยอดนิยมอื่น ๆ ที่กล่าวว่าคุณควรอ่านของเราคำถามที่พบบ่อย แม้ว่าสถาปัตยกรรมซอฟต์แวร์จะอยู่ในหัวข้อ แต่คุณต้องแก้ไขคำถามให้มีความเฉพาะเจาะจงมากขึ้น "การอภิปรายที่ดีเกี่ยวกับสถาปัตยกรรมทั่วไป" ไม่เหมาะสมกับรูปแบบคำถาม & คำตอบของเว็บไซต์
yannis

ฉันเป็นผู้เยี่ยมชมไซต์ S / E บ่อยครั้งฉันมีความรู้สึกว่าจะไม่มีใครตอบคำถามนี้อย่างไรก็ตามความคิดเห็น "อภิปราย" ขอบคุณสำหรับตัวชี้ MVC แม้ว่า :)
แบรดมอร์ริส

คำตอบ:


29

แผนภาพคร่าวๆของสถาปัตยกรรมของโครงการขนาดใหญ่ล่าสุดที่ฉันเข้าร่วม

ป้อนคำอธิบายรูปภาพที่นี่

มันเป็นเพียงโครงร่างพื้นฐานที่ดัดแปลงมาจากเอกสารสถาปัตยกรรมที่เกิดขึ้นจริงและนำเสนอในลักษณะที่คล้ายกับเป็นวิธีการปกติ n ชั้นรวมกับโดยทั่วไปวิธีการ MVC ในขณะที่คุณสามารถดูตรรกะและระดับข้อมูลที่เชื่อมต่อผ่านชั้นบริการและโดยเฉพาะอย่างยิ่งREST APIที่ได้รับแรงบันดาลใจจากRecessซึ่งเป็นกรอบ PHP ที่รู้จักกันน้อย

อย่าประดิษฐ์ล้อใหม่

ฉันทำงานกับสามเฟรมเวิร์ค:

  • Zend Framework

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

  • Kohana

    โคฮาน่าเริ่มต้นจากการแยกตัวของ CodeIgniter และนั่นเป็นเหตุผลที่เพียงพอสำหรับฉันที่จะไม่ใช้มันในตอนแรก ทุกวันนี้มันได้เติบโตขึ้นเป็นกรอบการทำงานที่มั่นคงและสง่างามที่แตกต่างจากทุกอื่น ๆ โดยต่อไปนี้วิธีการลำดับชั้น MVC HMVC ช่วยให้มากขึ้นขยายของ modularization กว่า MVC สำหรับโครงการในแผนภาพฉันปรับ HMVC ของ Kohana เป็น ZF แต่ฉันเริ่มใช้ Kohana สำหรับโครงการขนาดเล็กและพิจารณาให้ใหญ่ขึ้นเช่นกัน

  • CodeIgniter

    ฉันใช้เพียงเพราะโครงการดั้งเดิมที่ฉันสืบทอดให้หลีกเลี่ยงถ้าเป็นไปได้

ตามที่คำตอบอื่น ๆ ชี้ให้เห็นว่า ORM มักจะมีประโยชน์เสมอ ผมใช้หลักคำสอนอย่างกว้างขวางและคุณควรจะดูที่มันทำแผนที่ใหม่สำหรับCouchDBและMongoDB scalability เป็นต้องในการใช้งานขนาดใหญ่และคุณควรประเมินโซลูชั่น NoSQL

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

ประสิทธิภาพ

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

xdebugส่วนใหญ่รู้จักกันในชื่อดีบักเกอร์ แต่สามารถใช้เป็นprofiler ได้เช่นกัน ผมได้เริ่มต้นเมื่อเร็ว ๆ นี้โดยใช้Zend เซิร์ฟเวอร์และฉันอย่างรักของคุณสมบัติรหัสติดตาม น่าเสียดายที่ไม่มีในCommunity Editionแต่ xdebug เป็นตัวเลือกที่เหมาะสม

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

ในฐานะที่เป็นฐานข้อมูลหลักคำสอนของแบบสอบถามและผลแคชงานมหัศจรรย์โดยเฉพาะอย่างยิ่งรวมกับmemcached และแน่นอนเราไม่สามารถลืมส่วนหน้าได้ ทีมงานเจ๋ง ๆของ Yahoo ได้รวบรวมรายการแนวปฏิบัติที่ดีที่สุดมากมาย ฉันไม่ใช่นักพัฒนาที่แท้จริง แต่ฉันได้เห็นผลลัพธ์ที่น่าอัศจรรย์ในโครงการเดี่ยว

สุดท้าย PHP มีกลไกการเก็บขยะใหม่เอี่ยมคุ้มค่าที่จะดู

ความปลอดภัย

โลกของการรักษาความปลอดภัยของ PHP นั้นวุ่นวายพูดน้อยที่สุด ฉันไม่มีผู้เชี่ยวชาญดังนั้นให้ปฏิบัติตามคำแนะนำทั่วไปดังต่อไปนี้:

  • เปิดโครงการความปลอดภัยของแอปพลิเคชันบนเว็บ

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

  • สแตกช่องโหว่

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

ฝูงชนที่IT Security Stack Exchangeสามารถช่วยให้คุณได้คำตอบที่มีการศึกษามากขึ้น

อ่านเพิ่มเติม


1
คำตอบที่ดี; การนำเสนอที่ดี; เค้าโครงที่ยอดเยี่ยม ... งานที่ยอดเยี่ยม!
ไดนามิก

@ แจขอบคุณ! คุณอ่านทั้งหมดหรือยัง : P มันยาวไปหน่อยฉันสงสัยว่าฉันควรจะตัดมันสักหน่อย
yannis

ฉันลองแล้ว! ;-)
ไดนามิก

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

นั่นเป็นคำตอบที่ฉันต้องการ! มันเป็นนรกของข้อมูลจำนวนมากที่จะใช้ในฉันคิดว่าไม่ดีต้องดูดซับและ tinkering ในชั่วโมงถัดไป แต่คุณได้ให้ฉันเริ่มต้น ขอบคุณ :)
แบรดมอร์ริส

1

เว็บไซต์ developerworks ของไอบีเอ็มมีบทความ PHPจำนวนมากส่วนมากค่อนข้างดี พวกเขามีชุดของบทความเปรียบเทียบ PHP กรอบเว็บและอีกชุดเกี่ยวกับเว็บไซต์โดยใช้กรอบ CakePHP

เก่า "Onlamp" เว็บไซต์ของโอเรลลีมีบทความเกี่ยวกับ MVC ใน PHP ผู้เขียนบทความที่ไปในการอธิบาย MVC ในรายละเอียดบาง

บทความของ O'Reilly นั้นค่อนข้างเก่า แต่พวกเขาจะพาคุณไป สิ่งที่ IBM developerworks เป็นสิ่งที่ดีจริงๆและครอบคลุมมากในสิ่งที่คุณขอ


1

ฉันทำงานเกี่ยวกับ PHP มาหลายปีแล้ว Altough ฉันเห็นด้วยกับยานนิสว่าคำถามนี้เปิดขึ้นมาฉันคิดว่าฉันจะให้คำแนะนำกับคุณไม่กี่ข้อ ขั้นแรกให้เป็น Yannis กล่าวว่ายูควรมีลักษณะเป็น MVC ให้ทำทั้งสองกรอบฉันจะแนะนำเป็นCodeIgniterและSymfony อันแรกมีน้ำหนักเบาและเริ่มต้นใช้งานได้ง่ายมากอย่างไรก็ตามคุณอาจต้องเพิ่มการปรับแต่งพิเศษบางอย่างเพื่อให้การติดตั้งดีขึ้น Symfony เป็นโครงการที่ตั้งขึ้นโดยFabien Potencierที่ใช้หลายรูปแบบในการออกแบบวิศวกรรมซอฟต์แวร์ แต่โค้งการเรียนรู้มากชันกว่าCodeIgniter 's

ตอนนี้สองคุณควรมีลักษณะเป็นเชื่อมต่อฐานข้อมูลซึ่งฉันจะใช้เวลาเป็นสองส่วนใหญ่กรอบออมที่โดดเด่นสำหรับ PHP, หลักคำสอนและการขับเคลื่อน โดยส่วนตัวแล้วฉันชอบ Propel และแม้กระทั่งเขียนถึงวิธีการติดตั้ง Propel ที่ติดตั้งบนแอพที่ใช้CodeIgniterอย่างไรก็ตาม Symfony นั้นมีความสำคัญมากกว่าDoctrineแต่ให้คุณใช้อย่างใดอย่างหนึ่ง หากคุณต้องการตรวจสอบเพิ่มเติมเกี่ยวกับ Doctrine และPropelลองดูคำถามนี้ที่ฉันถามเมื่อไม่นานมานี้

สุดท้ายคุณควรมีลักษณะเป็นกรอบ templating เช่นSmarty , DwooหรือTwigg Smartyเป็นรุ่นเก่าที่สุดและเสถียรที่สุด Dwoo สืบทอดจากSmartyและเพิ่มสิ่งหนึ่งหรือสองที่ให้การสนับสนุนที่ดีขึ้นใน OOP PHP 5 สุดท้ายTwiggเป็นอีกทางเลือกแม่แบบที่มีให้ทีม Symfonyผมยังไม่ได้เห็นมันเอง แต่ถ้ามันมาจากทีม Symfony มันควรจะมีความสุข

หวังว่าคำพูดทั้งหมดนี้ทำให้รู้สึกบางอย่างเดวิด

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