のための作成のインターフェイスは、これは希望ではなく、個々のパラメータ値を渡す方法パラメータを表す新しいインターフェースを導入するためにインタフェースの実装 - パラメータ
思想
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;
}
}
考えが間違っているかの欠陥を持って、私はわからない、両方の可能性があり、それ故に質問。
なぜ入力プロパティにセッターがあるのですか?それは私には奇妙なにおいがする。サービスプロバイダが入力のプロパティ値を変更できるようになると思いますか? – recursive
@再帰的サービスはそれらを設定しません。それ以外の場合、呼び出しコードはどのようにパラメータ値を設定しますか? – niksofteng
呼び出しコードは、このインターフェイスを介してのみ呼び出すコードにアクセスする必要はありません。インターフェースの目的は、関連する操作を責任でグループ化することです。その責任が入力として機能するのであれば、インターフェース上にセッターは必要ありません。しかし、これは、実装者またはより派生したインタフェース上に存在することはできません。 'List'であっても、別の例を使用するには、項目を 'IEnumerable 'に '.Add()'することはできません。 –
recursive