Плагін (шаблон проєктування)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Плагін (англ. Plugin) — шаблон проєктування, який дозволяє підставити значення для абстракції не під час компіляції, а під час виконання програми.[джерело?]

Опис[ред. | ред. код]

Один і той самий код виконується у різних середовищах, для розробки, тестування тощо. Для того, щоб не змінювати код, варто представити декілька реалізацій одного і того самого класу у кожному середовищі. Розробники вирішують цю проблема за допомогою фабрики, що обростає умовними операторами. Плутанина появляється не лише від кількості фабрик, але і від того, що конфігурацію можуть ускладнюватись.

Даний шаблон пропонує винести реєстрацію сервісів із коду в зовнішній ресурс та підставляти значення для абстракції під час виконання програми.

Реалізація[ред. | ред. код]

Нехай нам необхідно генерувати ідентифікатор для об'єкта, який буде збережений у сховище. Зрозуміло, що для розробки, нам головне швидкість, а для роботи надійність. Напишемо реалізацію обох класів, які потім підставлятимемо динамічно.

interface IdGenerator
{
	int GetIdentifier();
}

class DevelopmentIdGenerator : IdGenerator
{
	public int GetIdentifier()
    {
        return new Random().Next();
    }
}

class ProductionIdGenerator : IdGenerator
{
    public int lastId = 0;

	public int GetIdentifier()
    {
        return lastId++;
    }
}

Тоді напишемо фабрику, яка динамічно визначатиме необхідну реалізацію.

class ServiceFactory
{
	public TInterface Get<TInterface>()
    {
        var configFile = File.ReadAllLines("Configuration.txt");
        var configuration = configFile.ToDictionary(k => k.Split("->").First(), v => v.Split("->").Last());
        
        var implementationName = configuration[typeof(TInterface).GetName()];
        
        return Activator.CreateInstance(implementationName) as TInterface;
    }
}

Сам файл конфігурацій може виглядати наступним чином, та при потребі змінюватись у кожному середовищі.

IdGenerator -> DevelopmentIdGenerator

Окрім файлів існують й інші способи збереження конфігурацій. Наприклад, це може бути зовнішній сервіс абощо.

Див. також[ред. | ред. код]

Джерела[ред. | ред. код]