我了解空接口很可能是代码的味道。我发现自己正在使用它,而我却找不到设计缺陷。
我有一个DBServer抽象类,名为Server
public abstract class Server
{
protected ICustomerRepository CustomerRepository;
public string HostName{ get; }
protected Server(string HostName)
{
this.HostName = HostName;
}
protected GetCustomers()
{
return CustomerRepository.GetCustomers();
}
}
由于我使用两个数据库引擎(例如A和B),所以我有两个实现。
实施A要求ICustomerRepository
用于A,例如ACustomerRepository
。
但是,为了能够对A的实现进行单元测试,我将使用接口IACustomerRepository
并注入依赖项。
问题在于此接口为空。
public interface ICustomerRepository
{
string HostName { get; set; }
IEnumerable<ICustomer> GetCustomers();
}
public interface IACustomerRepository:ICustomerRepository
{
}
此接口实现了从数据库中检索引擎A的逻辑:
class ACustomerRepository : IACustomerRepositoryRepository
{
public IEnumerable<ICustomer> GetCustomers()
{
//Data retrieval logic...
}
}
该实现通过Unity注入A的Server
实现中:
public class ServerA: Server
{
public ServerA (
string HostName,
IACustomerRepository ACustomerRepository):
base(HostName)
{
CustomerRepository = ACustomerRepository;
ACustomerRepository.HostName = HostName;
}
}
统一配置:
container.RegisterType<IACustomerRepository, ACustomerRepository>();
我已经阅读了有关“标记接口”的信息,但我不确定它是否适用于此。
您能帮我找出潜在的问题,以便解决此代码异味吗?