創建接口這是第一個想到的,而讀Interface Implementation (Interface Segregation Principle)接口實現 - 中參數
思想
介紹那會表示方法的參數而不是傳遞各個參數值,新的界面我得到了。如下圖所示:
interface IServiceProviderInput
{
string Username { get; }
string Password { get; }
string AgentId { get; } // XYZServiceProvider needs this.
// Similarly add props here to represent new parameters
// required by future service provider implementations.
}
interface IServiceProvider
{
bool Authenticate(IServiceProviderInput parameters);
}
class ABCServiceProvider : IServiceProvider
{
public bool Authenticate(IServiceProviderInput parameters)
{
return true;
}
}
class EFGServiceProvider : IServiceProvider
{
public bool Authenticate(IServiceProviderInput parameters)
{
return true;
}
}
class XYZServiceProvider : IServiceProvider
{
public bool Authenticate(IServiceProviderInput parameters)
{
return true;
}
}
問題
請問這是否有意義,或者什麼都在這個破綻?有什麼想法嗎?
編輯
又一想增加更多的特定接口的XYZ提供商:
interface IServiceProviderInput
{
string Username { get; }
string Password { get; }
}
interface IXYZServiceProviderInput : IServiceProviderInput
{
string AgentId { get; }
}
class XYZServiceProvider : IServiceProvider
{
public bool Authenticate(IXYZServiceProviderInput parameters)
{
return true;
}
}
這可能是兩種想法是不正確的或有缺陷,我不知道,因此問題。
爲什麼輸入屬性有setter?這對我來說很奇怪。您希望服務提供商能夠更改輸入的屬性值嗎? – recursive
@recursive服務不會設置它們。調用代碼如何設置參數值呢? – niksofteng
調用代碼不需要通過此接口專門訪問它們。界面的目的是通過責任將相關操作分組在一起。如果這個責任是作爲一種輸入,那麼接口上就不需要一個setter。但這並不意味着setter不能存在於實現或更多派生的接口上。 要使用另一個示例,即使您可以在「List」上,也不能'將一個項目添加到'IEnumerable '。 –
recursive