Die C # -Community hat das Präfix "I" so allgegenwärtig verwendet, um eine Schnittstelle zu kennzeichnen, dass selbst die unerfahrensten Programmierer wissen, dass sie es verwenden.
Warum stellen wir dann keine Aufzählungen, abstrakten Klassen oder Strukturen voran (möglicherweise mit "E", "A" bzw. "S")?
Wenn wir beispielsweise alle abstrakten Klassen mit einem "A" markieren würden, würde dies wertvolle Informationen über diesen Typ liefern, die zwar abgeleitet werden könnten, aber nicht sofort offensichtlich sind.
Bitte beachten Sie, dass ich mich nicht für diese Änderung einsetze, sondern nur zu verstehen versuche, warum wir die Dinge nicht so machen.
Dieser Thread antwortet, warum wir das Präfix "I" verwenden, antwortet jedoch nicht, warum wir keine anderen Präfixe verwenden.
quelle
Antworten:
Der Zweck der Namenskonvention für Schnittstellen besteht darin, eine schnelle Entscheidung zu treffen, wie die von Ihrer Klasse implementierte Schnittstelle aufgerufen werden soll. Wenn Sie eine haben
Frobnicator
, aber eine Schnittstelle zum Entkoppeln deklarieren müssen oder aus welchem Grund auch immer, dannIFrobnicator
erfordert die Entscheidung, sie aufzurufen , keine bewussten Überlegungen, und das ist gut so.Das gleiche Problem gilt nicht für die anderen Konstrukte, die Sie benennen. Aufzählungen und Strukturen sind nützlich, aber es ist nicht erforderlich, zusätzlich zum Namen selbst einen zweiten , kurzen, transparenten, offensichtlich verwandten Namen zu finden . Daher besteht kein Druck, ein 'E' auf den Namen einer Aufzählung oder Struktur zu setzen.
(Abstrakte Klassen ähneln Schnittstellen, da Sie eine zweite, konkrete Klasse bereitstellen müssen, um etwas zu erledigen. Daher haben sie möglicherweise die Konvention erhalten, mit 'A' zu beginnen, aber aus irgendeinem Grund haben sie dies nicht getan. Wenn Ich darf spekulieren, ich denke, dass 'Ich' als besonders enger Buchstabe etwas damit zu tun haben könnte.)
quelle
AnimalBase
und verschiedene Aromen sindAnimalGiraffe
,AnimalLion
usw.List
da die sehr technisch benanntenArrayList
undLinkedList
die Namen der Implementierungen sind. (C #, glaube ich, hatIList
als Schnittstelle undList
als Array-Liste)Point p = myPoints[3]; p.X += 3;
dies Auswirkungen haben würdemyPoints[3].X
. Rückblickend hätte ich es vorgezogen, C #var->field
für den Klassenfeldzugriff undvar.field
für den Strukturfeldzugriff zu verwenden, aber offensichtlich nicht. Dennoch scheint es hilfreich zu sein, sie auf einen Blick zu unterscheiden.Ich denke, es wird nicht viel verwendet, weil:
Aus diesem letzten Punkt und einer Interpretation könnten Sie schließen. Systems Hungarian (Präfix-Typ) ist schlecht und sollte nicht verwendet werden. Apps Ungarisch (Präfix Art) hat es verwendet.
Wenn Sie Ihre Frage zurücknehmen, denke ich, dass Ihre vorgeschlagene Notation eine Form von Apps Ungarisch ist. Wenn Sie der Meinung sind, dass sich der Mehrwert zu den Kosten summiert und Sie ihn konsequent in Ihre Codebasis implementieren, ist dies in Ordnung. Da Sie dies jedoch pro Projekt berücksichtigen müssen, sollte dies keine allgemeine Regel sein.
Ich denke, die Leute haben bemerkt, dass es öfter für Schnittstellen wichtig war, und deshalb ist es eine allgemeine Regel für Schnittstellen geworden.
quelle
Nur ein (hoffentlich zutreffender) Gedanke:
Es gibt einen offensichtlichen Trend zur "Codierung an Schnittstellen" anstelle konkreter Klassen. "Heutzutage" scheint es fast vorteilhafter zu sein, eine Namenskonvention für die Klassen zu haben, wie sie mit einem 'C' zu beginnen, als den Buchstaben 'I' für die Schnittstelle zu haben.
Ich habe gerade ein Java-Projekt beendet, in dem alle Schnittstellen tatsächlich als Modell bezeichnet wurden. Ja, die Konvention für den Schnittstellennamen bestand darin, den Namen mit 'Modell' zu beenden ... und dann eine Art 'DataTransferObject / DTO' die Schnittstelle als implementieren zu lassen ::
während in C #
Ich verdrahte mein Gehirn neu, um diesen Schmerz aufrechtzuerhalten, aber ich kann sehen, wie es hilfreich sein kann, sich Gedanken über die Programmierung der Schnittstelle zu machen.
quelle