Cleaner ist der Versuch der technischen Unterstützung folgenden gerade in Arbeit befindlichen A3's.
obsidian://open?vault=Training2&file=A3s%2FA3%20Probleml%C3%B6sungstemplate
Es handelt sich um ein Experiment für ein Werkzeug, dass technologische und strukturelle Drift und Innovation sichtbar machen und dem entgegen wirken kann.
- Es soll eine Übersicht über unerwünschte Abweichungen darstellen.
- Ggf. noch unbekannte Muster erkennen und nachfragen.
- Ein nächstes einfaches Refactoring aufstellen, so dass man Lösungen schrittweise in den neuen Lösungsstandard überführen kann.
- Nur erlaubte Usings. (nuget-Pakete müssen explizit erlaubt werden)
- IOSP: If-Statements dürfen keine Expressions enthalten
- Linq: Es sind nur Ketten bis zu 2 Steps erlaubt, damit die Lesbarkeit der Ketten gewährleistet ist.
- Methodenlänge: Methoden dürfen nur 10 Zeilen lang sein.
- NotImplementedException: Code darf keine NotImplementedExceptions beinhalten
- Public Properties dürfen keine public setter haben (immutability)
- Dateien dürfen insgesamt nicht länger als 500 Zeilen sein.
- Dateien dürfen nur eine Deklaration (class, interface, enum, struct) beinhalten
- Dateien sollten immer nach dem innerhalb deklarierten Typ heißen
- Keine public properties mit generic lists als Typ, auch wenn sie nur getter haben.
- Keine public fields.
- Keine Out / Ref Parameter verwenden.
- Das .Net-interne Konfigurationsmanagement sollte nicht verwendet werden.
- SQL ist nur in Klassen erlaubt, die auf *Repository enden.
- Klassen die auf *Repository enden sollten nicht von anderen Klassen abgeleitet sein.
- Klassen, die auf *Repository enden haben mindestens einen IDataAccessor-Konstruktor-Parameter
- Methoden, die if statements enthalten, die tiefer als 2 Ebenen verschachtelt sind.
- Es gibt bestimmte Standard-Bibliotheken, die immer verwendet werden sollten. (Core, Frontend falls UI...)
- ? Klassen, die auf *Repository enden werden alle über eine gemeinsame Factory erstellt
- Wir verwenden ausschließlich den Logger aus der Core-Bibliothek.
- Jede Anwendung muss in der Program.cs in der Main-Funktion eine bestimmte Sequenz an Befehlen enthalten.
- Es sind nur bestimmte .Net-Versionen erlaubt.
- Alle Referenzen sollten aktuell sein. (Nuget)
- Alle Referenzen sollten aktuell sein. (Eigenes Artefaktsystem)
- ? Struktur-Regeln? Was sollte wo sein?
- ? Keine Enums
- ? Keine switch-Statements
- ? Isolations-Regeln: Vielleicht kann man Regeln formulieren, die es wahrscheinlich machen, dass man Themen in Subnamespaces zusammenfasst, statt nach Klassenarten zu sortieren.
- Wenn CSS vorhanden ist, sollte es sich nur um max. das Frontend-Framework und 1-2 zusätzliche CSS-Dateien handeln.
- Wenn Javascript vorhanden ist, sollten keine Vendor-Pakete eingebaut sein (das ist Aufgabe des Frontend Frameworks)
- Kein Typescript. R. C++. (Explizite Liste erlaubter und nicht erlaubter Dateitypen?)
- At the upmost execution level there should be a catch all for exceptions and it should be implemented in a way, that those exceptions are logged.
- ? Jedes Git-Repository sollte explizit als entweder "aktiv zu warten" oder "nicht aktiv zu warten" klassifiziert sein (an einem gemeinsamen Ort)
- ? Für aktiv zu wartende Git-Repositories sollte bei den Anforderungen ein MOC-* existieren.
- #region verbieten