Tôi đang cố gắng hiểu những gì thực sự xác định khớp nối chặt chẽ. Tôi có read a number của posts về chủ đề này nhưng có một điều vẫn không phù hợp với tôi.Tóm tắt chức năng liên quan bằng cách sử dụng giao diện và khớp nối chặt chẽ
Tôi hiểu rằng các lớp học nên được tiêm vào các lớp khác bằng cách sử dụng giao diện của họ thay vì triển khai cụ thể. Tôi cũng hiểu rằng nếu một lớp học tuân thủ một giao diện thì bất kỳ lớp nào sử dụng giao diện được tiêm có thể gọi các hàm công khai được định nghĩa trong giao diện và mong đợi chức năng tương tự.
interface iFormatter()
{
public function format(array $order): array
}
public class OrderFormatter implements iFormatter
{
public function format(array $order): array
{
// ...
return $formattedArray;
}
}
public class OrderGenerator implements iGenerator
{
private $formatter;
public function __construct(iFormatter $formatter)
{
$this->formatter = $formatter;
}
public function generate()
{
// ...
return $this->formatter->format($order);
}
}
Vì vậy, tôi nghĩ rằng trong trường hợp chỉ những thay đổi định dạng, điều này sẽ được định nghĩa là lỏng lẻo;
$example = new OrderGenerator(new CarOrderFormatter);
$example->generate();
$example = new OrderGenerator(new VanOrderFormatter);
$example->generate();
Điều tôi hoàn toàn không biết là khi bạn trừu tượng trách nhiệm với nhau nhưng những lớp đó vẫn gắn liền với nhau. Một cái gì đó như
$example = new CarOrderGenerator(new CarOrderFormatter);
$example->generate();
$example = new VanOrderGenerator(new VanOrderFormatter);
$example->generate();
Có bạn có thể vượt qua trong một định dạng khác nhau để các máy phát điện, nhưng chắc chắn thường xuyên hơn mà không phải một số lỗi có thể xảy ra trong format
chức năng nếu nó là hy vọng dữ liệu nhất định từ generate
chức năng trong lớp bê tông XXXOrderGenerator
?
Vì vậy, tôi tin Tôi đã tóm tắt trách nhiệm đối với các lớp của riêng mình trong ví dụ trên và mặc dù giao diện đã được sử dụng Tôi không chắc chắn nếu điều này vẫn được kết nối chặt chẽ hoặc kỹ thuật lỏng lẻo? Hoặc nếu tôi đã bỏ lỡ điểm hoàn toàn ...
Cảm ơn bạn, điều này đã xóa hết cho tôi rất nhiều – myol