Objekt-orientierte design-Muster zu vermeiden, if/then/else-Anweisungen

Weil ich bin relativ neu OOP /C# ich weiß nicht das richtige Muster um dieses Problem zu lösen:

Muss ich bauen, eine plugin-Architektur für verschiedene IO-Anbietern.
Der host liest die benötigten Provider-name /- Typ aus der config, dann sollte der provider instanziieren und parametrieren.

Also ich habe im Grunde diese Schnittstellen:

public interface IoProvider //(Base interface, all Providers implements this)
{
    void Initialize();
    void Execute();
}

public interface IFileProvider: IoProvider
{
    string PropertyA { get; set; }
}

public interface ISmtpProvider : IoProvider
{
    string PropertyB { get; set; }
    string PropertyC { get; set; }
}

Wie Sie sehen sind die abgeleiteten, spezialisierten IO Anbieter haben verschiedene zusätzliche parameter, um die Eigenschaften, die die Basis-Schnittstelle nicht haben.
Zu vermeiden, if/then/else-oder switch-Anweisungen meine Idee war die Verwendung eines factory-pattern.

Aber wenn verstehe ich das richtig löst es nicht mein if/then/else " - problem, da auf dem client habe ich zu prüfen, den abgeleiteten Typ um den korrekten Parametern.

So dass der Programmablauf auf dem Host wäre so etwas wie dieses:
Host-config liest, bekommt den Namen/Typ der benötigten Provider
Host fordert Fabrik und bekommt der Anbieter

Aber, wie dies zu vermeiden ist es, ein Muster zu lösen, das ohne wenn/dann/sonst?

If (provider == typeOf(IFileProvider))  
PropertyA = value  
else if (provider == typeOf(ISmtpProvider))  
PropertyB = value  
PropertyC = value  
Elseif 
  • was ist falsch mit if/else?
  • Ich mag Karten, die für diese Art der Sache, aber die Fabriken haben oft große switch-Anweisungen. Warum hast du das Bedürfnis, es zu entfernen?
  • ich habe gelernt, das ist schlecht coding style. es gibt nicht nur 2 Arten von Anbietern, im moment gibt es 5 verschiedene Anbieter.
  • warum ist es schlechter Stil? Was ist das problem, dass das versuchen zu vermeiden? Wie ist eine Konfigurationsdatei, in verschiedenen seiner Auswirkungen in der Praxis als eine große switch-Anweisung?
InformationsquelleAutor Radioactive | 2012-11-27
Schreibe einen Kommentar