创建接口这是第一个想到的,而读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