我想了解真正定義了緊耦合的相關功能。我有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