using System;
using System.Collections.Generic;
// Давайте договоримся, что для нас не имеет значения,
// как именно сохранены данные. Это может быть json, xml
// А может оказаться что это БД или бинарнас сериализация
// Главное, что данные можно получить через вот этот интерфейс
public interface IDataRecord {
// Возвращает какое-нибудь свойство запуска
// Это может быть путь к паке или там количество итераций
// С точки же зрения xml или json - это значение аттрибута
// с именем name
string Get(string name);
}
// А вот этот интерфейс содержит те методы, которые нам надо вызывать
public interface IProcessor
{
void MakeChildrenHappy(int numberOfCandys, bool haveClown, string place);
void BeatAllJedis(string weapoonName, bool killThem, int timeout);
}
public class Program
{
public static void Main()
{
var taskList = LoadTasks();
var processor = CreateProcessor();
foreach(var task in taskList)
{
var type = task.Get("type");
switch(type)
{
case "make_children_happy":
RunMakeChildrenHappy(processor, task);
break;
case "beat_all_jedis":
RunBeatAllJedis(processor, task);
break;
}
}
}
public static void RunMakeChildrenHappy(IProcessor processor, IDataRecord task)
{
var numberOfCandys = int.Parse(task.Get("number_of_candys"));
var haveClown = bool.Parse(task.Get("have_clown"));
var place = task.Get("place");
processor.MakeChildrenHappy(numberOfCandys, haveClown, place);
}
public static void RunBeatAllJedis(IProcessor processor, IDataRecord task)
{
var weapoonName = task.Get("weapoon_name");
var killThem = bool.Parse("kill_them");
var timeout = int.Parse("timeout");
processor.BeatAllJedis(weapoonName, killThem, timeout);
}
public static List<IDataRecord> LoadTasks()
{
// TODO: на самом деле мы тут подгружает json или xml, или из БД читаем
// Но пример то не про форматы сохранения.
return null;
}
public static IProcessor CreateProcessor()
{
// TODO: Ну а тут мы создаём класс, который реализует методы, которые
// нам надо вызывать
return null;
}
}