Code-Review in C#: Was zu prüfen ist und wie man Feedback gibt

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Code Review in C#: Was prüfen und wie man Feedback gibt



Code Review ist keine bloße Formalität, sondern einer der Schlüsselprozesse zur Sicherstellung der Codequalität. Besonders wichtig ist dies für Projekte in C# und .NET, wo hohe Leistung, Lesbarkeit und die Einhaltung moderner Standards eine entscheidende Rolle spielen. In diesem Artikel analysieren wir, worauf bei der Überprüfung von C#-Code zu achten ist und wie man Feedback gibt, das nützlich und konstruktiv ist.



1. Architektur und Einhaltung der SOLID-Prinzipien

Bevor Sie sich konkrete Codezeilen ansehen, bewerten Sie die Gesamtarchitektur. In C# ist dies aufgrund der weit verbreiteten Nutzung der OOP besonders wichtig.

  • Single Responsibility: Jede Klasse und Methode sollte eine einzige Aufgabe erfüllen. Wenn eine Methode zu viel tut, ist dies ein Grund für ein Review.
  • Open/Closed: Prüfen Sie, ob die Funktionalität erweitert werden kann, ohne vorhandenen Code zu ändern (z. B. über Interfaces oder abstrakte Klassen).
  • Dependency Injection: In .NET Core/5+ ist DI der Standard. Stellen Sie sicher, dass Abhängigkeiten über den Konstruktor übergeben werden und nicht innerhalb der Klasse erstellt werden.


// Schlecht: Verletzung von SRP und DIpublic class OrderService{    private readonly SqlConnection _connection = new SqlConnection("...");        public void ProcessOrder(Order order)    {        // Validierungslogik        // Logik zum Speichern in der DB        // Logik zum Senden von E-Mails    }}

// Gut: Aufteilung in Dienste und DIpublic class OrderService{ private readonly IOrderRepository _orderRepository; private readonly IEmailService _emailService;

public OrderService(IOrderRepository orderRepository, IEmailService emailService) { _orderRepository = orderRepository; _emailService = emailService; }

public void ProcessOrder(Order order) { _orderRepository.Save(order); _emailService.SendConfirmation(order); }}


2. Sicherheit und Fehlerbehandlung

Sicherheit ist ein kritischer Bestandteil jeder C#-Anwendung. Achten Sie auf folgende Aspekte:

  • SQL-Injection: Verwenden Sie parametrisierte Abfragen oder Entity Framework, anstatt Strings zu verketten.
  • Ausnahmen: Schlucken Sie keine Ausnahmen mit leeren catch-Blöcken. Protokollieren Sie Fehler und verwenden Sie finally zur Freigabe von Ressourcen.
  • Null-Sicherheit: Verwenden Sie in C# 8+ nullable reference types. Prüfen Sie Methodenargumente auf null.


// Schlecht: Anfällig für SQL-Injectionvar query = "SELECT * FROM Users WHERE Name = '" + userName + "'";

// Gut: Parametrisierte Abfragevar command = new SqlCommand("SELECT * FROM Users WHERE Name = @name", connection);command.Parameters.AddWithValue("@name", userName);


Prüfen Sie auch, ob die Anwendung Ausnahmen an Systemgrenzen korrekt behandelt (z. B. in ASP.NET Core-Controllern).



3. Leistung und Speicherverwaltung

C# ist eine Sprache mit automatischer Speicherverwaltung, aber das bedeutet nicht, dass die Leistung vernachlässigt werden kann. Achten Sie beim Review auf:

  • LINQ-Abfragen: Vermeiden Sie mehrfache Iterationen über Sammlungen. Beispielsweise kann .ToList() nach jedem .Where() die Leistung erheblich verlangsamen.
  • Asynchronität: Verwenden Sie async/await für I/O-Operationen, aber missbrauchen Sie nicht .Result oder .Wait() – dies kann zu Deadlocks führen.
  • Objektpooling: Verwenden Sie für schwere Objekte (z. B. Datenbankverbindungen) Pooling, anstatt sie jedes Mal neu zu erstellen.


// Schlecht: Mehrfache Iterationenvar filtered = items.Where(x => x.IsActive).ToList();var sorted = filtered.OrderBy(x => x.Name).ToList                

Blogs

Buchempfehlungen