Ich habe folgende hässlich if-Anweisung, die Teil einer Klasse ist, die von einem IOC-Container gezogen wird:Wie kann ich diese hässliche if-Anweisung aufräumen?
protected virtual void ExecuteSourceControlGet(IBuildMetaData buildMetaData, IPackageTree componentTree)
{
if ((buildMetaData.RepositoryElementList != null) && (buildMetaData.RepositoryElementList.Count > 0))
{
componentTree.DeleteWorkingDirectory();
foreach (var repositoryElement in buildMetaData.RepositoryElementList)
{
repositoryElement.PrepareRepository(componentTree, get).Export();
}
}
if((buildMetaData.ExportList != null) && (buildMetaData.ExportList.Count > 0))
{
var initialise = true;
foreach (var sourceControl in buildMetaData.ExportList)
{
log.InfoFormat("\nHorn is fetching {0}.\n\n".ToUpper(), sourceControl.Url);
get.From(sourceControl).ExportTo(componentTree, sourceControl.ExportPath, initialise);
initialise = false;
}
}
log.InfoFormat("\nHorn is fetching {0}.\n\n".ToUpper(), buildMetaData.SourceControl.Url);
get.From(buildMetaData.SourceControl).ExportTo(componentTree);
}
Mein normaler Ansatz zur Beseitigung von if-Anweisungen ist eine Unterklasse für jede Bedingung zu erstellen.
Was anders an diesem Beispiel ist:
- Die Klasse, die diese Methode hat, wird von der IOC-Container gezogen.
- Ich möchte vielleicht die Logik zwischen den 2 if-Anweisungen zu laufen oder gar nicht.
Jeder Rat sehr willkommen.
Warum in aller Welt möchten Sie etwas eliminieren? Und Subklassen hinzufügen, nur um ein "wenn" loszuwerden? Ich kann verstehen, was Ihr Code leicht macht, daher ist es gut lesbar. Kein Grund, es zu ändern. – Treb
Ihr Code sieht gut für mich aus. – ANaimi