public static void Main()
var maintainer = new SqlDatabaseMaintainer("db");
maintainer.Restore("database-backup-20201016164152310.db");
UpdateService updateService = new UpdateService();
string result = updateService.Run("overload complete message");
Console.WriteLine(result);
public interface IMaintainer
void Restore(string dbFilePath);
void Update(int targetVersion);
public class SqlDatabaseMaintainer : IMaintainer
private string _fileExtension;
public SqlDatabaseMaintainer(string fileExtension)
_fileExtension = fileExtension;
string backupFileName = String.Format("database-backup-{0}.{1}", DateTime.Now.ToString("yyyyMMddHHmmssfff"), _fileExtension);
Service service = new BackupService() { DatabaseFilePath = backupFileName };
string backupResult = service.Run();
Console.WriteLine(backupResult);
public void Restore(string dbFilePath)
Service service = new RestoreService() { DatabaseFilePath = dbFilePath };
string restoreResult = service.Run();
Console.WriteLine(restoreResult);
public void Update(int targetVersion)
Service service = new UpdateService() { TargetVersion = targetVersion };
string updateResult = service.Run();
Console.WriteLine(updateResult);
public abstract class Service
CompleteMessage = "Service Complete";
public string CompleteMessage { get; set; }
public abstract string Run();
public class BackupService : Service
public string DatabaseFilePath { get; set; }
public override string Run()
return(String.Format("Database {0} Backed Up", DatabaseFilePath));
public class RestoreService : Service
public string DatabaseFilePath { get; set; }
public override string Run()
return(String.Format("Database {0} Restored", DatabaseFilePath));
public class UpdateService : Service
public int TargetVersion { get; set; }
public override string Run()
return(String.Format("Database Target Version {0} Schema Updated", TargetVersion));
public string Run(string completeMessage)
return String.Format("Update {0}", base.CompleteMessage);