Meine persönliche Präferenz ist es, darauf zu achten, dass der Typ unveränderlich ist. Zum Beispiel würde ich es ImmutableLayer vs. Layer nennen. Oder wenn aus irgendeinem Grund Immutable kein gutes Wort ist, um den Namen voranzutreiben, werde ich der Klasse ein Attribut hinzufügen, das anzeigt, dass es unveränderlich ist (Attribut wird in beiden Fällen hinzugefügt).
Das hat es Höhen und Tiefen. Das ist, gibt es einen zentralen Ort, um auf Unverfälschbarkeit zu überprüfen. Werfen Sie einen Blick auf den Typ und Sie sind im Geschäft. Sie müssen keine neuen Methodennamen oder Konventionen lernen. Der Nachteil des Ansatzes besteht darin, dass Sie in bestimmten Typ-Inferenz-Szenarien nicht erkennen können, dass der Wert unveränderlich ist. Zum Beispiel funktioniert dieser Code genauso gut für eine ImmutableCollection und eine normale Liste
var col = GetTheCollection();
col.Add(42);
Allerdings Ich mag zu Unveränderlichkeit accomidate keine Methodennamen zu ändern. Der Grund dafür ist, dass es sich um ein Problem handelt, das Sie immer wieder lösen müssen. Dinge benennen sollte einfach sein, aber es ist manchmal unglaublich schwierig.Denken Sie an all die Arten, die Sie jemals unveränderlich machen wollten. Stellen Sie sich vor, Sie müssten für jede Mutationsmethode dieser Typen neue Namen oder Konventionen finden. Es ist eine nicht-triviale Aufgabe und Sie werden viel Zeit damit verbringen, Benutzer über diese neuen Konventionen zu informieren.
Mein Traum-Szenario ist jedoch, einen Weg zu finden, um die Sichtbarkeit von unveränderlichen Typen zu erhöhen. Weil das das eigentliche Problem ist, ist es nicht unveränderlich, den Typ zu kennen. Derzeit gibt es keinen guten Weg, dies für alle Szenarien zu tun, aber ich hoffe auf die nächste Version der Sprachen/IDE.
Danke Jon. Ihre Frage ist sehr hilfreich. Sieht so aus, als ob Sie auch über die bestmöglichen Praktiken besorgt sind :) –
Ich denke gerne über Best Practices nach. Sie müssen meine Kollegen fragen, inwieweit mein Produktionscode sie wiedergibt ... –
lol. Persönlich versuche ich, das zu verwenden, was ich so schnell wie möglich lerne, damit ich nicht vergesse, sie in meine Arbeit zu integrieren :) Nur aus Neugier, verwenden Sie C# für die meisten Dinge, die Sie bei der Arbeit tun? –