static IEnumerable <Route> ServeRequest(Request request) { if (!CheckRequest(request)) { return(null); } (IGraphDatabase cars, IGraphDatabase trains) = MockData.InitDatabases(); List <IGraphDatabase> databases = new List <IGraphDatabase>(); databases.Add(cars); databases.Add(trains); IGraphDatabase database = new VehicleDatabase(databases, request.Filter.AllowedVehicles); database = new PopulationDatabase(database, request.Filter.MinPopulation); database = new HasRestaurantDatabase(database, request.Filter.RestaurantRequired); List <ISolver> solvers = new List <ISolver>(); solvers.Add(new BFS()); solvers.Add(new DFS()); solvers.Add(new DijkstraCost()); solvers.Add(new DijkstraTime()); IRouteProblem problem = ProblemFactory.MakeProblem(request.Problem, request.From, request.To); problem.Graph = database; foreach (ISolver solver in solvers) { if (solver.Name == request.Solver && problem.TrySolveBySolver(solver, out IEnumerable <Route> routes)) { return(routes); } } Console.WriteLine("Cannot find algorithm to solve this problem"); return(null); }