#1. Dấu hiệu (Smell)
Bạn có nhiều hàm mà danh sách tham số y hệt nhau:
function shipOrder($street, $city, $zip, $country) { ... }
function billOrder($street, $city, $zip, $country) { ... }
#2. Giải pháp: Introduce Parameter Object (Value Object)
Biến nhóm dữ liệu đó thành một Class duy nhất: Address.
class Address {
public function __construct(
public string $street,
public string $city,
public string $zip,
public string $country
) {}
}
// Hàm mới
function shipOrder(Address $address) { ... }
#3. Lợi ích
- Type-safe: Đảm bảo dữ liệu luôn đầy đủ.
- Dễ mở rộng: Nếu cần thêm
state, chỉ cần sửa classAddress, không cần sửa hàng chục hàm khác.
#4. Câu hỏi nhanh
Q: Tại sao gọi là Value Object? A: Vì nó chỉ chứa dữ liệu, không có logic nghiệp vụ phức tạp. Nếu 2 object Address có cùng giá trị property, chúng được coi là bằng nhau (đừng dùng ID để so sánh).