Ich entwickle eine App, mit der Ventile in einer industriellen Umgebung geöffnet und geschlossen werden können, und habe mir etwas Einfaches überlegt:
public static void ValveController
{
public static void OpenValve(string valveName)
{
// Implementation to open the valve
}
public static void CloseValve(string valveName)
{
// Implementation to close the valve
}
}
(Die Implementierung würde einige Datenbytes an die serielle Schnittstelle schreiben, um das Ventil zu steuern - eine "Adresse", die vom Ventilnamen abgeleitet ist, und entweder eine "1" oder eine "0", um das Ventil zu öffnen oder zu schließen.)
Ein anderer Entwickler fragte, ob wir stattdessen eine separate Klasse für jedes physikalische Ventil erstellen sollten, von denen es Dutzende gibt. Ich bin damit einverstanden, dass es schöner wäre, Code zu schreiben PlasmaValve.Open()
als ValveController.OpenValve("plasma")
, aber ist das übertrieben?
Außerdem habe ich mich gefragt, wie ich das Design mit Blick auf einige hypothetische zukünftige Anforderungen am besten angehen kann:
- Wir werden gebeten, einen neuen Ventiltyp zu unterstützen, für dessen Öffnen und Schließen andere Werte erforderlich sind (nicht 0 und 1).
- Wir werden gebeten, ein Ventil zu unterstützen, das auf eine beliebige Position von 0-100 eingestellt werden kann, anstatt einfach "offen" oder "geschlossen" zu sein.
Normalerweise würde ich Vererbung für diese Art von Dingen verwenden, aber ich habe kürzlich angefangen, mich mit "Komposition über Vererbung" zu beschäftigen und mich zu fragen, ob es eine bessere Lösung gibt, wenn Komposition verwendet wird.