Eine unangenehme, offene Frage, aber es ist ein Problem, gegen das ich immer stoße:
Software, die einfach zu warten und zu bedienen ist, ist eine gut konzipierte Software. Wenn Sie versuchen, ein Design intuitiv zu gestalten, müssen Sie die Komponenten so benennen, dass der nächste Entwickler auf die Funktion der Komponente schließen kann. Aus diesem Grund nennen wir unsere Klassen nicht "Type1", "Type2" usw.
Wenn Sie ein reales Konzept (z. B. einen Kunden) modellieren, ist dies im Allgemeinen so einfach wie die Benennung Ihres Typs nach dem real modellierten Konzept. Aber wenn Sie abstrakte Dinge erstellen, die systemorientierter sind, gehen Ihnen leicht die Namen aus, die sowohl leicht zu lesen als auch leicht zu verdauen sind.
Es wird (für mich) schlimmer, wenn ich versuche, Typenfamilien mit einem Basistyp oder einer Schnittstelle zu benennen, die beschreiben, was die Komponenten tun müssen, aber nicht, wie sie funktionieren. Dies führt natürlich dazu, dass jeder abgeleitete Typ versucht, die Art der Implementierung (z. B. IDataConnection
und SqlConnection
in .NET Framework) zu beschreiben. Wie können Sie jedoch etwas Kompliziertes ausdrücken, wie "Arbeiten durch Reflektion und Suchen nach bestimmten Attributen"?
Wenn Sie dann endlich einen Namen für den Typ ausgewählt haben, der Ihrer Meinung nach das beschreibt, was er versucht, fragt Ihr Kollege: "WTF macht das DomainSecurityMetadataProvider
eigentlich ? "
Gibt es gute Techniken, um einen aussagekräftigen Namen für eine Komponente zu wählen, oder um eine Familie von Komponenten zu erstellen, ohne durcheinander geratene Namen zu erhalten?
Gibt es einfache Tests, die ich auf einen Namen anwenden kann, um ein besseres Gefühl dafür zu bekommen, ob der Name "gut" ist und für andere intuitiver sein sollte?