backup = BackupFactory::build($scenario['backup']); $this->transport = TransportFactory::build($this->backup, $scenario['transport']); } public function send() { $this->transport->send(); } public static function launch($scenario) { // add autoloader static::register(); // check the given scenario if (is_readable($scenario)) { $scenario = json_decode(file_get_contents($scenario), true); if (!is_null($scenario) && static::isValid($scenario)) { $scenario = new self($scenario); $scenario->send(); } throw new \Exception('invalid scenario.'); } throw new \Exception('scenario not found.'); } public static function isValid(array $scenario) { return isset($scenario['backup']) && count($scenario['backup']) === 1 && isset($scenario['transport']) && count($scenario['transport']) === 1; } }