นี่คือกรอบสำหรับการพัฒนาทีมขนาดเล็กและขนาดกลาง
บล็อกส่วนบุคคลที่เรียบง่าย bybzmt/blog.php
บล็อกส่วนบุคคล bybzmt/blog.php ตามกรอบนี้มีประสิทธิภาพที่ทรงพลังมาก
| แบบอย่าง | ไฟล์คงที่ | หน้าแรก (2 บล็อก) | หน้าแรก (10 บล็อก) |
|---|---|---|---|
| FPM | 4705 | ค.ศ. 1507 | 1237 |
| ขี้เกียจ | 26607 | 3276 | 2084 |
├── assets 资源目录(如:字体文件等)
├── config
│ ├── dev 开发环境配置
│ ├── product 生产环境配置
├── index.php 项目入口
├── library 其它与composer不兼容的库
├── src
│ ├── Admin 管理后台
│ ├── Api app接口端
│ ├── Backend 内部(内网)接口
│ ├── Common 公共代码目录
│ ├── Console 控制台
│ ├── Wap 手机Web端
│ └── Web Web端
├── static
│ ├── admin 后台静态文件
│ └── web Web端静态文件
├── tests 单元测试目录
├── var 可读写目录(如:模板缓存等)
└── vendor composer库
เนื่องจาก Swoole เป็นโหมดหน่วยความจำผู้อยู่อาศัยวงจรชีวิตของตัวแปรทั่วโลกจึงเป็นระดับแอปพลิเคชันและไม่เหมือนกับโหมด FPM จึงเป็นเพียงระดับการร้องขอ ตัวแปรทั่วโลกสามารถรักษาได้ระหว่างคำขอที่แตกต่างกันดังนั้นวิธีการดั้งเดิมเช่น $ _get และ $ _post ไม่สามารถใช้ได้ เฟรมเวิร์กนี้สร้างวัตถุบริบทสำหรับการร้องขอแต่ละครั้งและจัดเก็บข้อมูลทั้งหมดที่เกี่ยวข้องกับคำขอปัจจุบันลงในวัตถุบริบท
วัตถุบริบทยังรับผิดชอบในการโหลดส่วนประกอบและการแทนที่ฟังก์ชั่นที่ลำดับชั้น
ดังในบล็อกข้างต้น:
เมื่อเริ่มต้นส่วนประกอบวัตถุบริบทจะมองหาองค์ประกอบที่เกี่ยวข้องในเนมสเปซก่อน หากไม่พบบริบทหลักจะเริ่มต้น ด้วยวิธีนี้สามารถขยายและแทนที่ส่วนประกอบที่คุณต้องการได้อย่างง่ายดาย
API:
วัตถุคำขอเป็น swoole_http_request ที่ใช้โดยตรง
วัตถุตอบสนองยังใช้ swoole_http_response โดยตรง
ในโหมด FPM เฟรมเวิร์กใช้เลเยอร์ความเข้ากันได้เพื่อรักษา API เช่นเดียวกับใน swoole
เฟรมเวิร์กใช้วัตถุทั้งหมดที่เกี่ยวข้องกับวัตถุบริบทเป็นส่วนประกอบส่วนใหญ่เพื่อให้ฟังก์ชั่นการสร้างอินสแตนซ์ที่รวดเร็วและไม่จำเป็นต้องมีการส่งผ่านวัตถุบริบทซ้ำ ๆ ซ้ำ ๆ
นอกจากนี้ส่วนประกอบยังมีวิธีการที่สะดวกในการใช้ในส่วนประกอบใด ๆ
Railing ไม่ได้ใช้การทำแผนที่แบบเปิด แต่ใช้การกำหนดเส้นทางที่ลงทะเบียนโดยมีข้อได้เปรียบในการทำความสะอาด
โครงการกำหนดเส้นทางอยู่ใน BYBZMT/Router.php
หากคุณไม่ชอบคุณสามารถแทนที่ด้วยไลบรารีที่คุณชอบและมันง่ายมากที่จะแทนที่ส่วนประกอบของเฟรมเวิร์ก
เฟรมเวิร์กแนะนำให้ใช้รูปแบบโมเดลโดเมนโดยใช้: บริการ, ตาราง, โครงสร้างแถว (โดเมน)
ควรสังเกตว่างานแสดงข้อมูลไม่ควรเขียนลงในบริการตารางและแถว เป็นเพียงหน้าที่ในการให้ข้อมูลพื้นฐานที่สุดเท่านั้น การจัดระเบียบโครงสร้างข้อมูลที่เกี่ยวข้องตามข้อกำหนดของหน้าและ API ควรดำเนินการในตัวควบคุมและมุมมอง
ฐานข้อมูลจะถูกแบ่งออกเป็นคลาสตารางที่มีฟังก์ชั่นพื้นฐานและคลาส TablesPlit ที่มีฟังก์ชั่นตาราง นอกจากนี้ยังมีลักษณะ TablerowCache ที่ให้ฟังก์ชั่นการแคช ตารางของผู้ใช้ใด ๆ ควรได้รับการสืบทอดจากตารางหรือคลาส TablesPlit และเมื่อต้องการแคชก็สามารถแนะนำได้
โปรดทราบว่าทั้งตารางและแคชรองรับการดำเนินการรับ/รับ/แทรก/อัปเดต/ลบในคลาสตารางเท่านั้น เมื่อใช้ SQL เพื่อดำเนินการข้อมูลโดยตรงคุณจะต้องรักษาฟังก์ชั่นแคชหรือตารางที่เกี่ยวข้องด้วยตนเอง
เฟรมเวิร์กให้วิธีการโหลดแบบ Lazyrow เมื่ออินสแตนซ์มันจะบันทึกเฉพาะ ID จากนั้นพยายามโหลดเป็นแบทช์จนกว่าจะมีการเข้าถึงแอตทริบิวต์
เฟรมเวิร์กมีฟังก์ชั่นทั่วไปและสะดวกในการใช้งาน
แคชนี้ไม่มีส่วนเกี่ยวข้องกับแคชในตารางด้านบนมันหมายถึงแคชที่ผู้ใช้ดูแลรักษาไว้ พยายามปล่อยให้แคชประเภทต่าง ๆ ได้รับการจัดการด้วยคลาสที่แตกต่างกันเพื่อหลีกเลี่ยงความขัดแย้งที่สำคัญ
เฟรมเวิร์กไม่ได้ให้ฟังก์ชั่นเทมเพลตและขอแนะนำให้สร้างโปรแกรมเทมเพลตของบุคคลที่สามที่มีอยู่โดยตรง (ตัวอย่างเช่น: twig)
ฟังก์ชั่นของเฟรมเวิร์กไม่ต้องการปรับให้เข้ากับทุกสภาพแวดล้อมพวกเขาจะต้องมีเฉพาะใน 80% ของกรณี สถานการณ์พิเศษสามารถจัดการได้เป็นพิเศษในโครงการเฉพาะ
ไม่มีรหัสมากในกรอบดังนั้นลองอ่านรหัสทั้งหมดให้มากที่สุด