Wenn ich Design für eine Aufgabe mache, kämpfe ich immer wieder gegen dieses quälende Gefühl, dass es, abgesehen davon, dass es sich um eine allgemeine Gliederung handelt, am Ende mehr oder weniger ignoriert wird. Ich gebe Ihnen ein Beispiel:
Ich habe ein Frontend für ein Gerät geschrieben, das Lese- / Schreibvorgänge hat. Im Klassendiagramm war es absolut sinnvoll, ihm eine Lese- und eine Schreibfunktion zu geben. Als es jedoch darauf ankam, sie tatsächlich zu schreiben, stellte ich fest, dass sie buchstäblich dieselbe Funktion waren, wobei nur eine Codezeile geändert wurde (Aufruf von Lese- und Schreibfunktionen). Um eine Codeduplizierung zu vermeiden, implementierte ich schließlich eine do_io-Funktion mit einem Parameter, der zwischen unterscheidet Operationen. Auf Wiedersehen Original Design.
Dies ist keine furchtbar störende Änderung, aber sie kommt häufig vor und kann auch in kritischeren Teilen des Programms auftreten. Ich frage mich daher, ob es sinnvoll ist, mehr Details als eine allgemeine Gliederung zu entwerfen, zumindest wenn dies der Fall ist kommt zur Architektur des Programms (natürlich müssen Sie bei der Angabe einer API alles genau formulieren).
Dies mag nur das Ergebnis meiner Unerfahrenheit im Design sein, aber andererseits haben wir agile Methoden, die sagen: "Wir geben die Planung weit im Voraus auf, alles wird sich sowieso in ein paar Tagen ändern", was häufig der Fall ist wie ich mich fühle.
Wie genau sollte ich Design "verwenden"?
do_ioscheint ein internes Implementierungsdetail dieser Klasse zu sein. Die öffentliche Schnittstelle wird und sollte wahrscheinlich immer noch seinread(...)undwrite(...)da sie viel ausführlicher über die Absicht des Anrufs ist.