我想了解真正定义了紧耦合的相关功能。我有read的posts关于这个问题,但有一点仍然不正确的坐我一个number。使用抽象接口VS紧密耦合
据我所知,类应该被注入到使用他们的接口,而其具体实现其他类。我也明白,如果一个类遵循一个接口,那么任何使用注入接口的类都可以调用接口中定义的公共函数,并期望类似的功能。
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);
}
}
所以我觉得在仅格式化的变化,这将被定义为松耦合的情况;
$example = new OrderGenerator(new CarOrderFormatter);
$example->generate();
$example = new OrderGenerator(new VanOrderFormatter);
$example->generate();
虽然我不太清楚当你将责任从彼此抽象出来但这些类仍然彼此紧密联系在一起。像
$example = new CarOrderGenerator(new CarOrderFormatter);
$example->generate();
$example = new VanOrderGenerator(new VanOrderFormatter);
$example->generate();
事情是,你可以在不同的格式传递给这些发电机,但肯定更经常会如果从generate
功能在XXXOrderGenerator
具体类期待某些数据format
函数内发生而不是一些错误?
所以我相信我有抽象以上,虽然接口已经使用我不知道如果这仍是紧耦合的,或者技术上松散耦合最后一个例子把责任落实到自己的类?或者,如果我错过了点......完全是说,当一个类有其他的依赖或依赖于内部或其他的细节要紧密结合
谢谢,这件事对我来说很重要 – myol