C # - Элегантная альтернатива оператора Switch с использованием интерфейса или внедрения зависимостей в библиотеке классов? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть библиотека классов, с которой в качестве ссылок связано несколько связанных библиотек классов, каждая из которых выполняет свой экспорт данных с использованием уникальных методов и свойств.

Чтобы выполнить один из этих экспортов, я вызываю «корневую» библиотеку классов из консольного приложения, передавая некоторую информацию о том, какой экспорт нужно запустить.

Этот корневой класс выполняет простую инструкцию Switch для вызова одного из экспортов. И хотя этот код работает нормально, я не думаю, что это самый элегантный способ сделать это.

Кто-то предложил использовать внедрение зависимостей, а кто-то сказал, что следует использовать интерфейс. Проведя некоторое исследование, я не смог найти хороший, простой пример, из которого я мог бы научиться кодировать такие реализации.

Ниже приведен оператор Switch. Мысли или идеи?

using System;

namespace ABC.Exporter
{
    public class Exporter
    {
        public void Export(string vendorName, string exportName, Client client)
        {
            // which Export are we doing?
            switch (vendorName)
            {
                case "Realogy" when exportName == "DashImportListings":
                    Realogy.Realogy.DashImportListings(client);
                    break;
                case "Zillow" when exportName == "Listings":
                    Zillow.Zillow.Listings(client);
                    break;
                case "Zillow" when exportName == "PastSales":
                    Zillow.Zillow.PastSales(client);
                    break;
                case "Xpressdocs" when exportName == "RecipientListingFeed":
                    Xpressdocs.Xpressdocs.RecipientListingFeed(client);
                    break;
                default:
                    throw new Exception("Invalid Export");
            }
        }
    }

}
...