Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save qt91/d1274f0a42948bc1a27b5caa453c0381 to your computer and use it in GitHub Desktop.
Save qt91/d1274f0a42948bc1a27b5caa453c0381 to your computer and use it in GitHub Desktop.
[Laravel] Tiêu chuẩn bắt đầu một dự án

Định nghĩa dự án Laravel trước khi bắt đầu

Môi trường

  • PHP 7.3
  • Web server: Nginx 1.14
  • Database: MySQL5.7
  • Laravel 5.8.*

Process flow

IN:

Route => Controller => Service => Repository => Mode

OUT:

Mode => Repository => Service => Controller => Presenter => View

Migration

Tạo mới Git Repository để chưa Migration, tránh việc xung đột trong quá trình phát triển. Lý do: Có nhiều Repository sẽ sử dùng đến database nên không thê để Migration vào bất cứ Repository chức năng nào khác.

Thư viện sử dụng

  • Twig
    • View Template Engine ( Thay thế cho Blade Template mặc định của Laravel )
  • Gettext
    • i18n ( Thay thế cho chức năng language mặc định của Laravel )

Công cụ

  • Editor / IDE
    • Sử dụng bất cứ loại nào, nhưng đảm bảo tuân thủ tiêu chuẩn PRS2 của PHP
    • Quality
      • Mess Detector (phpmd): Đảm bảo tiêu các tiêu chuẩn code

Log

Log Logic

Việc ghi log chi tiết sẽ giúp cho quá trình debug và theo dõi hệ thống trở nên đơn giản hơn. 1/ Log được ghi bắt lại ở bất kỳ Service nào thực thi Nội dung ghi nhân bao gồm:

  • Log info: dùng để thông báo bắt đầu và kết thúc một function. Ghi nhận các thông số là đường dẫn với hàm thực thì và các tham số thực thi

Bắt đầu function Service

\Log::info(sprintf('[Start Service] %s', $class), $arguments);
// $class: là đường dẫn tuyệt đối đến file thực thị, 
//hoặc function thực thi
// $arguments: là danh sách các biên truyền vào

Kết thúc function Service

\Log::info(sprintf('[End Service] %s', $class));
// $class: là đường dẫn tuyệt đối đến file thực thị, 
//hoặc function thực thi
  • Log debug: Được sử dụng cho các trường hợp theo dõi Transaction với database
\Log::debug('beginTransaction');
//Khi bắt đầu mở một Transaction mới
\Log::debug('commit');
//Commit lại transaction hiện tại
\Log::debug('rollback');
//Rollback nếu gặp vấn đề

Log Query

Ghi nhân lại tất cả các query được thực thi bao gồm

  • Tên kết nối
  • Thời gian thực thi
  • Nội dung query
$log = [  
  'Connection' => $query->connectionName,  
  'Query_Time' => sprintf('%.4f ms', $query->time),  
  'SQL' => $sql,  
];
Log::debug('excute query', $log);

Test

Tuẩn thủ viết code theo kỹ thuật TDD

Feature Test

  • Tạo Feature Test ( Theo tính năng )
    • Kiểm tra validation
    • Kiểm tra chứng thực
      • Case 1: Kiếm tra login cho route ( Từ chối nếu không Auth )
      • Case 2: Kiểm tra nếu đã Login ( Truy cập đúng route mong muốn )
    • ...

Service Test

  • Tạo mới Model rỗng
  • Tạo mới RepositoryInterface
  • Tạo mới StubRepository
  • Tạo mới Service ( Theo tính năng )
  • Tạo mới Service Test

Repository Test

  • Tạo mới Model rỗng
  • Tạo mới RepositoryInterface
  • Tạo mới Repository
  • Tạo mới RepositoryTest

Coverage

Yêu cầu đạt trên 80% dự án

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment