2. 19:10 12/08/2026
Chào bạn Ngọc Mai,
Hãy xem dữ liệu HTTP, database, queue và dịch vụ bên ngoài là các boundary không tin cậy hoặc không cùng kiểu dữ liệu với domain. strict_types giúp phát hiện sai lệch sớm trong code PHP, nhưng không tự xác thực input của request hay tự biến dữ liệu PDO thành object đúng nghĩa.
Một cấu trúc thực dụng là:
1. Controller/handler chỉ nhận request, kiểm tra schema/validation, chuẩn hóa format và tạo input DTO rõ ràng. Không truyền thẳng mảng request vào service nghiệp vụ.
2. Application service dùng DTO/domain type đã hợp lệ để điều phối use case; logic nghiệp vụ không nên phụ thuộc $_POST, header hay kiểu trả về thô của PDO.
3. Repository chịu trách nhiệm mapping row database sang read model/entity, ép kiểu một cách có chủ đích cho int, bool, DateTimeImmutable, enum hoặc value object.
4. Validation có hai lớp: validation input để phản hồi lỗi cho client và invariant domain để bảo vệ các quy tắc không được phá vỡ dù dữ liệu đến từ nguồn nào.
5. Test từng boundary với input rỗng, kiểu sai, timezone, số vượt phạm vi và dữ liệu legacy bất thường.
Đừng chỉ cast mọi thứ thành int/string để hết TypeError. Cast im lặng có thể biến input lỗi thành giá trị hợp lệ giả tạo. Hãy định nghĩa rõ dữ liệu nào được chấp nhận, lỗi nào trả cho client và lỗi nào là sự cố vận hành cần log/cảnh báo.
0