ข้ามไปยังเนื้อหา

แนวปฏิบัติที่ดีที่สุดขององค์กรรหัส

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

โมดูล XOOPS ที่มีการจัดการอย่างดีควรเป็นไปตามโครงสร้างนี้:

mymodule/
├── xoops_version.php # Module metadata
├── index.php # Frontend entry point
├── admin.php # Admin entry point
├── class/
│ ├── Controller/ # Request handlers
│ ├── Handler/ # Data handlers
│ ├── Repository/ # Data access
│ ├── Entity/ # Domain objects
│ ├── Service/ # Business logic
│ ├── DTO/ # Data transfer objects
│ └── Exception/ # Custom exceptions
├── templates/ # Smarty templates
│ ├── admin/ # Admin templates
│ └── blocks/ # Block templates
├── assets/
│ ├── css/ # Stylesheets
│ ├── js/ # JavaScript
│ └── images/ # Images
├── sql/ # Database schemas
├── tests/ # Unit and integration tests
├── docs/ # Documentation
└── composer.json # Composer configuration
Classes: PascalCase (UserController, PostRepository)
Methods: camelCase (getUserById, createUser)
Properties: camelCase ($userId, $username)
Constants: UPPER_SNAKE_CASE (DEFAULT_LIMIT, MAX_USERS)
Functions: snake_case (get_user_data, validate_email)
Files: PascalCase.php (UserController.php)
  • หนึ่งคลาสต่อไฟล์
  • ชื่อไฟล์ตรงกับชื่อคลาส
  • โครงสร้างไดเร็กทอรีตรงกับลำดับชั้นของเนมสเปซ
  • เก็บชั้นเรียนที่เกี่ยวข้องไว้ด้วยกัน
  • ใช้การตั้งชื่อที่สอดคล้องกันทั่วทั้งโมดูล
{
"autoload": {
"psr-4": {
"Xoops\\Module\\Mymodule\\": "class/"
}
}
}
<?php
class Autoloader
{
public static function register()
{
spl_autoload_register([self::class, 'autoload']);
}
public static function autoload($class)
{
$prefix = 'Xoops\\Module\\Mymodule\\';
if (strpos($class, $prefix) !== 0) {
return;
}
$relative = substr($class, strlen($prefix));
$file = __DIR__ . '/' .
str_replace('\\', '/', $relative) . '.php';
if (file_exists($file)) {
require $file;
}
}
}
?>
  • แต่ละชั้นเรียนควรมีเหตุผลหนึ่งข้อในการเปลี่ยนแปลง
  • แยกข้อกังวลออกเป็นประเภทต่างๆ
  • ให้ชั้นเรียนมีสมาธิและเหนียวแน่น
  • ใช้ชื่อที่มีความหมายและสื่อความหมาย
  • ปฏิบัติตามมาตรฐานการเข้ารหัส PSR-12
  • หลีกเลี่ยงคำย่อเว้นแต่จะชัดเจน
  • ใช้รูปแบบที่สอดคล้องกัน
  • จัดกลุ่มชั้นเรียนที่เกี่ยวข้องเข้าด้วยกัน
  • แยกข้อกังวลออกเป็นไดเร็กทอรีย่อย
  • จัดระเบียบเทมเพลตและเนื้อหา
  • ใช้การตั้งชื่อไฟล์ที่สอดคล้องกัน
  • ใช้เนมสเปซที่เหมาะสมสำหรับทุกคลาส
  • ทำตามการโหลดอัตโนมัติ PSR-4
  • เนมสเปซตรงกับโครงสร้างไดเร็กทอรี
  • รวมศูนย์การกำหนดค่าในไดเร็กทอรี config
  • ใช้การกำหนดค่าตามสภาพแวดล้อม
  • อย่าตั้งค่าฮาร์ดโค้ด
<?php
class Bootstrap
{
private static $serviceContainer;
private static $initialized = false;
public static function initialize()
{
if (self::$initialized) {
return;
}
global $xoopsDB;
self::$serviceContainer = new ServiceContainer($xoopsDB);
self::$initialized = true;
}
public static function getServiceContainer()
{
if (!self::$initialized) {
self::initialize();
}
return self::$serviceContainer;
}
}
?>

ดูเพิ่มเติมที่:

  • การจัดการข้อผิดพลาดสำหรับการจัดการข้อยกเว้น
  • การทดสอบสำหรับองค์กรทดสอบ
  • ../Patterns/MVC-รูปแบบโครงสร้างตัวควบคุม

Tags: #best-practices #code-organization #psr-4 #module-development