想想這樣:如果ICar
預期Car
作爲參數,ICar
將明確對Car
可以根據,而去耦是當您使用的接口有什麼想要的。
如果ICar
取決於Car
:
public interface ICar
{
void Save(Car car);
}
public class Car : ICar
{
public void Save(Car car) { }
}
public class Van : ICar
{
// Here Van needs to have a Car object, why should it?
public void Save(Car car) { }
}
如果Car
被棄用(例如,被認爲過於籠統),你需要重構整個代碼。
相反,如果ICar
取決於ICar
:
public interface ICar
{
void Save(ICar car);
}
public class Car : ICar
{
public void Save(ICar car) { }
}
public class Van : ICar
{
public void Save(ICar car) { }
}
在這裏,它確實不是在所有問題,如果Car
存在與否,你是不是再加的實施。
但是,由於ICar
實施時已經是ICar
,因此您無需將其作爲參數傳遞。
考慮:
public interface ICar
{
// Will save myself
void Save();
}
對戰:
public interface ICar
{
// Will save some ICar
void Save(ICar car);
}
是'Save'方法'ICar'界面的一部分?爲什麼要傳遞另一個'ICar'的實例呢? – orhtej2
@ orhtej2好點。我已經移除了ICar,因爲它不是必需的,因爲我已經有了當前實例。謝謝你的幫助。 –