Как я могу избавиться от пустого интерфейса - PullRequest
0 голосов
/ 03 июля 2018

Я понимаю, что пустые интерфейсы могут быть запахом кода. Я использую его и не могу найти, в чем заключается недостаток дизайна.

У меня есть абстрактный класс 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...
    }
}

Эта реализация внедряется в реализацию Server для A с использованием Unity:

public class ServerA: Server
    {
        public ServerA (
            string HostName,
            IACustomerRepository ACustomerRepository):
            base(HostName)
        {
            CustomerRepository = ACustomerRepository;
            ACustomerRepository.HostName = HostName;
        }
    }

Конфигурация Unity:

container.RegisterType<IACustomerRepository, ACustomerRepository>();

Я читал о «маркерных интерфейсах», но я не совсем уверен, что это применимо здесь.

Не могли бы вы помочь мне определить основную проблему, чтобы я мог исправить этот запах кода?

...