Я разрабатываю класс для сравнения двух каталогов и запускаю действие, когда каталог / файл в исходном каталоге не существует в каталоге назначения.
Вот прототип класса:
public abstract class IdenticalDirectories
{
private DirectoryInfo _sourceDirectory;
private DirectoryInfo _destinationDirectory;
protected abstract void DirectoryExists(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory);
protected abstract void DirectoryDoesNotExist(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory);
protected abstract void FileExists(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory);
protected abstract void FileDoesNotExist(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory);
public IdenticalDirectories(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory)
{
...
}
public void Run()
{
foreach (DirectoryInfo sourceSubDirectory in _sourceDirectory.GetDirectories())
{
DirectoryInfo destinationSubDirectory = this.GetDestinationDirectoryInfo(subDirectory);
if (destinationSubDirectory.Exists()) {
this.DirectoryExists(sourceSubDirectory, destinationSubDirectory);
} else {
this.DirectoryDoesNotExist(sourceSubDirectory, destinationSubDirectory);
}
foreach (FileInfo sourceFile in sourceSubDirectory.GetFiles()) {
FileInfo destinationFile = this.GetDestinationFileInfo(sourceFile);
if (destinationFile.Exists()) {
this.FileExists(sourceFile, destinationFile);
} else {
this.FileDoesNotExist(sourceFile, destinationFile);
}
}
}
}
}
Вышеприведенный прототип является абстрактным классом.Мне интересно, было бы лучше сделать класс неабстрактным, а приемник метода Run - процессором?например.
public void Run(IIdenticalDirectoriesProcessor processor)
{
foreach (DirectoryInfo sourceSubDirectory in _sourceDirectory.GetDirectories()) {
DirectoryInfo destinationSubDirectory = this.GetDestinationDirectoryInfo(subDirectory);
if (destinationSubDirectory.Exists()) {
processor.DirectoryExists(sourceSubDirectory, destinationSubDirectory);
} else {
processor.DirectoryDoesNotExist(sourceSubDirectory, destinationSubDirectory);
}
foreach (FileInfo sourceFile in sourceSubDirectory.GetFiles()) {
FileInfo destinationFile = this.GetDestinationFileInfo(sourceFile);
if (destinationFile.Exists()) {
processor.FileExists(sourceFile, destinationFile);
} else {
processor.FileDoesNotExist(sourceFile, destinationFile);
}
}
}
}
Что вы видите за и против каждой реализации?