Ich entwickle eine C# -Bibliothek mit .NET Framework 4.7 und Visual Studio 2017 Community.Prinzip der einfachen Verantwortung: Methode DoDatabaseBackup macht eine Menge Dinge
Ich versuche zu verstehen und Single-Verantwortung-Prinzip richtig zu verwenden.
ich diese Klasse habe eine Sicherung in einem SQL Server 2012-Datenbank zu tun:
public static class DbManagement
{
private static string sqlBackupStatement =
"BACKUP DATABASE [{0}] TO DISK = N'{1}' WITH COMPRESSION, COPY_ONLY, NAME=N'{2}'";
/// <summary>
/// Do backup for a database.
/// </summary>
/// <param name="connectionString">Connection's string to database</param>
/// <param name="path">Path to safe the database</param>
/// <param name="backupFileName">Backup's file name</param>
/// <param name="backupName">This name will be used to identify this backup.</param>
/// <returns>Database's execution result</returns>
public static int DoDatabaseBackup(
string connectionString,
string path,
string backupFileName,
string backupName)
{
if (string.IsNullOrWhiteSpace(connectionString))
throw new ArgumentNullException(nameof(connectionString));
if (string.IsNullOrWhiteSpace(path))
throw new ArgumentNullException(nameof(path));
if (string.IsNullOrWhiteSpace(backupFileName))
throw new ArgumentNullException(nameof(backupFileName));
if (string.IsNullOrWhiteSpace(backupName))
throw new ArgumentNullException(nameof(backupName));
string databaseName = GetDatabaseName(connectionString);
string fullPath = GetFullPath(path);
string pathWithFile = fullPath + backupFileName + "_" + DateTime.Now.ToString("yyyyMMddHHmm") + ".bak";
string description = string.Format("{0} - Full database Backup", backupName);
if (!Directory.Exists(fullPath))
Directory.CreateDirectory(fullPath);
string sqlStatement = string.Format(sqlBackupStatement, databaseName, pathWithFile, description);
TRZLDbContext context = new TRZLDbContext(connectionString);
return
context.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, sqlStatement);
}
private static string GetDatabaseName(string connectionString)
{
SqlConnectionStringBuilder sqlConnBuilder =
new SqlConnectionStringBuilder(connectionString);
return sqlConnBuilder.InitialCatalog;
}
private static string GetFullPath(string path)
{
StringBuilder builder = new StringBuilder(path);
if (!path.EndsWith("\\"))
builder.Append("\\");
DateTime today = DateTime.Now;
builder.Append(today.Year.ToString());
builder.Append("\\");
builder.Append(today.Month.ToString());
builder.Append("\\");
return builder.ToString();
}
}
Ich denke, ein DoDatabaseBackup
eine Menge Dinge in Methode tun:
- Get Datenbanknamen.
- Vollständiger Pfad zum Speichern der Sicherungsdatei.
- Den vollständigen Pfad mit dem Dateinamen des Backups abrufen.
- Backup-Beschreibung erstellen.
- Erstellen Sie ein Verzeichnis, in dem ich die Sicherung speichern werde, wenn sie nicht existiert.
- Erstellen Sie die SQL-Anweisung, um die Sicherung durchzuführen.
- Und schließlich ... tun Sie das Backup.
Bin ich Single-Verantwortung-Prinzip korrekt hier verwenden? Es ist nicht, muss ich Punkte 1 bis 6 zu 6 Methoden bewegen?
Danke für Ihre Antwort, Oh, ich habe einen Tippfehler. Die erste Frage lautet: Benutze ich das Prinzip der einfachen Verantwortung ** richtig ** hier? Übrigens benutze ich kein Java, ich benutze C#. – VansFannel
Ich stimme nicht zu, die SRP besagt, dass eine Klasse oder eine Methode nur aus einem Grund geändert werden sollte. In diesem Fall hat die Methode viele Verantwortlichkeiten, die für mich klar gegen das Prinzip verstoßen – Mehdi